MATLAB在Python中的密度等价

MATLAB在Python中的密度等价,python,matlab,numpy,scipy,Python,Matlab,Numpy,Scipy,我在网上查过,还没有找到一个答案或方法来解决以下问题 我正在将一些MATLAB代码翻译成Python,在MATLAB中,我希望通过函数找到内核密度估计: [p,x] = ksdensity(data) 其中p是分布中x点处的概率 Scipy有一个函数,但只返回p 有没有办法找到x值的概率 谢谢 另一个选项是Scikit学习Python包中的内核密度估计器 下面是一个类似于Matlab文档中关于高斯分布的ksdensity的小示例: import numpy as np import matpl

我在网上查过,还没有找到一个答案或方法来解决以下问题

我正在将一些MATLAB代码翻译成Python,在MATLAB中,我希望通过函数找到内核密度估计:

[p,x] = ksdensity(data)
其中p是分布中x点处的概率

Scipy有一个函数,但只返回p

有没有办法找到x值的概率


谢谢

另一个选项是Scikit学习Python包中的内核密度估计器

下面是一个类似于Matlab文档中关于高斯分布的ksdensity的小示例:

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()
由此生成的绘图如下所示:


这种形式的
ksdensity
调用会自动生成任意的
x
scipy.stats.gaussian_kde()
返回一个可调用函数,该函数可以使用您选择的任何
x
进行计算。等价的
x
将是
np.linspace(data.min(),data.max(),100)


在寻找最佳带宽时,Matlab比KernelDensity快几个数量级。你知道如何让KernelDenisty更快吗尤卡7月16日18日20:58


嗨,尤卡。matlab用于估计带宽,这很快,但需要来自正态分布的数据。有关更多信息,请参见此图。

为了快速参考,我尝试了
scipy.stats.gaussian_kde()
sklearn.neights.KernelDensity
,第一个是
kerneldead
,第二个是有效的。在找到最佳带宽时,Matlab比KernelDensity快几个数量级。你知道如何让KernelDenisty更快吗?
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)