MATLAB ksdensity equivalente en Python

He buscado en línea y todavía tengo que encontrar una respuesta o una forma de entender lo siguiente

Estoy traduciendo un código MATLAB a Python, donde en MATLAB busco encontrar la estimación de densidad del kernel con la función:

[p,x] = ksdensity(data) 

donde p es la probabilidad en el punto x en la distribución.

Scipy tiene una función pero solo devuelve p.

¿Hay una manera de encontrar la probabilidad en los valores de x?

¡Gracias!

Esa forma de la llamada ksdensity genera automáticamente un x arbitrario. scipy.stats.gaussian_kde() devuelve una función invocable que puede evaluarse con cualquier x de su elección. El equivalente x sería np.linspace(data.min(), data.max(), 100) .

 import numpy as np from scipy import stats data = ... kde = stats.gaussian_kde(data) x = np.linspace(data.min(), data.max(), 100) p = kde(x) 

Otra opción es el estimador de densidad del kernel en el paquete Scikit -Learn Python, sklearn.neighbors.KernelDensity

Aquí hay un pequeño ejemplo similar a la documentación de Matlab para ksdensity para una distribución gaussiana:

 import numpy as np import matplotlib.pyplot as plt from sklearn.neighbors import KernelDensity np.random.seed(12345) # similar to MATLAB ksdensity example x = [randn(30,1); 5+randn(30,1)]; Vecvalues=np.concatenate((np.random.normal(0,1,30), np.random.normal(5,1,30)))[:,None] Vecpoints=np.linspace(-8,12,100)[:,None] kde = KernelDensity(kernel='gaussian', bandwidth=0.5).fit(Vecvalues) logkde = kde.score_samples(Vecpoints) plt.plot(Vecpoints,np.exp(logkde)) plt.show() 

La ttwig que esto produce se ve como:

introduzca la descripción de la imagen aquí