我可以在Python中获得核密度估计的一阶导数吗?

Yas*_*min 2 python scipy python-2.7

我有一个二维数组的数据,我用来gaussian_kde估计数据分布。现在,我想获得所得密度估计器的一阶导数以获得零交叉。是否可以从估计密度中得到它?如果是这样,Python 中是否有任何内置函数可以提供帮助?

Ima*_*ngo 5

按照gaussian_kde文档中的示例,一旦您获得了ZX 轴上的密度(或更一般地说)的估计值,您就可以使用标准numpy函数计算其导数:

diff = np.gradient(Z)
Run Code Online (Sandbox Code Playgroud)

请注意,np.gradient计算中心差异。如果您想要前向差异,您可以执行以下操作:

diff = np.r_[Z[1:] - Z[:-1], 0]
Run Code Online (Sandbox Code Playgroud)

要找到零交叉点,您可以执行以下操作:

sdiff = np.sign(diff)
zc = np.where(sdiff[:-1] != sdiff[1:])
Run Code Online (Sandbox Code Playgroud)

您可以将上述内容扩展到 2D,就像dy, dx = np.gradient(Z)使用Z2D 数组一样。然后在Y和X方向上进行操作。