【问题标题】:Find ideal sampling points for data sets with arbitrary sampling points为具有任意采样点的数据集找到理想的采样点
【发布时间】:2016-02-11 10:10:51
【问题描述】:

我的测量数据具有相当随意的采样点。例如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)

效率非常低,因为 num 必须非常大才能获得 0 左右的足够分辨率。在这种特殊情况下,我需要几个 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 值的集合一样。

【问题讨论】:

  • 我想到了一件事情earlier todaynp.logspace 会帮助你吗?
  • 很遗憾不是,因为大部分采样点可能位于开头、中间、结尾或什至介于两者之间。也可能有多个批量
  • 让我看看我是否理解正确:有一些未知的函数 f(x),你只有一个选择的 x 值 x_i(你在问题中列出),以及相应的值 f(x_i)(您没有),并且您想使用您必须在某个范围 [a,b] 上逼近 f(x) 的平均值的值?
  • 我有一组测量结果 f_i。每个由 x_i(采样点)和相应的 y_i(测量值,问题中省略)组成。我现在想计算平均值(f_i)。不幸的是, x_i 可能非常不同(如示例所示)。给定范围 [a,b] 和所有插值函数 f_int,i,我知道需要找到理想的采样点来计算平均值。

标签: python numpy scipy interpolation


【解决方案1】:

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

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

其中 y 是 y 值的向量。

【讨论】:

    猜你喜欢
    • 2011-09-11
    • 1970-01-01
    • 2015-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-01
    相关资源
    最近更新 更多