【发布时间】:2015-03-25 10:47:49
【问题描述】:
我有一个二维值数组,我想在其上执行高斯 KDE,但有一个问题:假设这些点具有不同的方差。为此,我有第二个二维数组(具有相同的形状),它是用于每个点的高斯方差。在简单的例子中,
import numpy as np
data = np.array([[0.4,0.2],[0.1,0.5]])
sigma = np.array([[0.05,0.1],[0.02,0.3]])
会有四个高斯,其中第一个以 x=0.4 为中心,σ=0.05。 注意:实际数据远大于 2x2
我正在寻找以下两件事之一:
- 一个高斯 KDE 求解器,可以改变每个点的带宽
或
- 一种将每个高斯的结果映射到 3 维数组的方法,每个高斯在一系列点上进行评估(例如,沿着 np.linspace(0,1,101) 评估每个中心/σ 对)。在这种情况下,我可以例如通过 outarray[:,:,51] 获得 x=0.5 处的 KDE 值。
【问题讨论】:
-
你不能逐行分割数组吗?例如。执行一维 KDE,例如
data[i,:]' in afor` 在i in range(data.shape)上循环?另外,你看过这个吗? docs.scipy.org/doc/scipy-0.14.0/reference/generated/… -
逐行行不通,因为每个单元格都有自己的差异。逐个单元格可以工作,我只是不知道实现它的好方法——我当前的实现时间太长了一个数量级。至于 scipy 包,我目前正在尝试重写它以满足我的需要。如果没有更好的答案出现,我可能最终会这样做。
标签: python arrays kernel-density