【发布时间】: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 today:
np.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