我可以在 python 中获得核密度估计的一阶导数吗?
Can I get first derivative for kernel density estimation in python?
我有一个二维数组的数据,我使用 gaussian_kde
来估计数据分布。现在,我想获得结果密度估计器的一阶导数以获得零交叉点。是否有可能从估计的密度中得到它?如果是这样,Python 中是否有任何内置函数可以提供帮助?
按照 gaussian_kde 文档中的示例,一旦有了 Z
,或者更一般地说,估计了 X 轴上的密度,就可以使用标准计算其导数numpy 函数:
diff = np.gradient(Z)
请注意,np.gradient 计算中心差异。如果你想要前向差异,你可以这样做:
diff = np.r_[Z[1:] - Z[:-1], 0]
要找到过零点,您可以执行以下操作:
sdiff = np.sign(diff)
zc = np.where(sdiff[:-1] != sdiff[1:])
您可以将上面的二维扩展为 dy, dx = np.gradient(Z)
和 Z
二维数组。然后在Y和X两个方向上操作。
我有一个二维数组的数据,我使用 gaussian_kde
来估计数据分布。现在,我想获得结果密度估计器的一阶导数以获得零交叉点。是否有可能从估计的密度中得到它?如果是这样,Python 中是否有任何内置函数可以提供帮助?
按照 gaussian_kde 文档中的示例,一旦有了 Z
,或者更一般地说,估计了 X 轴上的密度,就可以使用标准计算其导数numpy 函数:
diff = np.gradient(Z)
请注意,np.gradient 计算中心差异。如果你想要前向差异,你可以这样做:
diff = np.r_[Z[1:] - Z[:-1], 0]
要找到过零点,您可以执行以下操作:
sdiff = np.sign(diff)
zc = np.where(sdiff[:-1] != sdiff[1:])
您可以将上面的二维扩展为 dy, dx = np.gradient(Z)
和 Z
二维数组。然后在Y和X两个方向上操作。