找到具有任意采样点的数据集的理想采样点

时间:2015-11-10 13:51:18

标签: python numpy scipy interpolation

我的测量数据具有非常随意的采样点。例如,3条曲线的采样点可能是

[0.1, 0.15, 0.17, 0.18, 0.185, 20, 1000, 15000]
[0.09, 0.151, 0.169, 0.18, 21, 14000]
[0.11, 0.2, 13999, 14001]

(省略相应的y值)。为了计算平均值,我使用scipy interp1d线性插值所有曲线并找到共同支撑。最后,我正在寻找合理的设定点来评估平均值。

np.linspace(min(common_support), max(common_support), num)

效率非常低,因为对于0左右的足够分辨率,num必须非常大。在这种特殊情况下,我需要几个设定点,大约在0.1-0.2,有些在20,14000,15000。

我试图计算所有采样点using

的概率密度函数
# common support is the set of all x-values in the common support of all funtions
kernel = stats.gaussian_kde(common_support)
class rv(stats.rv_continuous):
        def _rvs(self, *x, **y):
            return kernel.resample(int(self._size))

它不能很好地工作,因为我的发行通常不是高斯分布。

TL:DR :我需要x值来评估分布的平均值,就像数据的公共支持中所有x值的集合一样。

1 个答案:

答案 0 :(得分:0)

您正在使用线性插值。通过应用梯形法则计算分段线性函数的积分,其中样本点是折线的顶点,即您的数据点。平均值是积分除以积分范围。所以,只需使用

mean = np.trapz(y, [0.1, 0.15, 0.17, 0.18, 0.185, 20, 1000, 15000])/(15000 - 0.1)

其中y是y值的向量。