spherical_kde
0.1.2
Estos paquetes le permiten hacer una estimación de densidad de núcleo rudimentaria en una esfera. Sugerencias de mejoras/extensiones bienvenidas.
El principio fundamental es reemplazar la función gaussiana tradicional utilizada en la estimación de la densidad del núcleo con la distribución von Mises-Fisher.
La estimación de ancho de banda sigue siendo difícil.
import numpyfrom spherical_kde import sphericalkdeimport matplotlib.pyplot como pltimport cartopy.crsfrom matplotlib.gridspec import gridspec, gridspecFromSubplotSpec# Elija una semilla para la platación determinista. (10, 10)) gs_vert = gridspec (3, 1) gs_lower = gridspecFromsubplotsPec (1, 2, subplot_spec = gs_vert [1]) fig.add_subplot (gs_vert [0], proyection = cartopy.crs.mollweide ()) Fig. add_subplot (gs_lower [0], proyection = cartopy.crs.orthográfico ()) fig.add_subplot (gs_lower [1], proyección = cartopy.crs.orthográfico (-10, 45)) fig.add_subplot (gs_vert [2], projection = cartopy.crs.platecArree ())# Elija parámetros para muestras de muestras = 100pi = numpy.pi# Genere algunas muestras centradas en (1,1) +/- 0.3 radianstheta_samples = numpy.random.normal (loc = 1, escala = 0.3 , tamaño = nsamples) phi_samples = numpy.random.normal (loc = 1, escala = 0.3, size = nsamples) phi_samples = numpy.mod (phi_samples, pi*2) kde_green = sphericalkde (phi_sples, theta_samples)# generan algunas muestras centradas en ON (-1,1) +/- 0.4 RADIANSTHETA_SAMPLES = numpy.random.normal (loc = 1, escala = 0.4, tamaño = nsamples) phi_samples = numpy.random.normal (loc = -1, escala = 0.4, tamaño = = nsamples) phi_samples = numpy.mod (phi_samples, pi*2) kde_red = sphericalkde (phi_samples, theta_samples)# generar una propagación de muestras a lo largo de la latitud 2, altura 0.1theta_samples = numpy.random.normal (loc = 2, escala = 0.1,, tamaño = nsamples) phi_samples = numpy.random.uniform (low = -pi/2, high = pi/2, size = nsamples) phi_samples = numpy.mod (phi_samples, pi*2) kde_blue = sphericalkde (phi_samples, theta_samples, bandwidth = 0.1) para Axe en la figura: axes: ax.set_global () ax.gridlines () ax.coastLines (linewidth = 0.1) kde_green.plot (ax, 'g') kde_green.plot_samples (ax) kde_red.plot (ax, ax, 'r') kde_blue.plot (ax, 'b')# guardar en plotfig.tight_layout () fig.saveFig ('plot.png')