【问题标题】:linear interpolation in numpynumpy中的线性插值
【发布时间】:2014-01-13 07:14:41
【问题描述】:

我有 2 个 numpy 数组

X = [[2 3 6], [7 2 9], [7 1 4]]
a = [0  0.0005413307    0.0010949014    0.0015468832    0.0027740823    0.0033288284]
b = [0  0.0050251256    0.0100502513    0.0150753769    0.0201005025    0.0251256281]

new = []
for z in range(3):
     new.append(interp1d(a, z[0], b, 'linear'))

我收到错误:

    if xi is not None and shape[axis] != len(xi):
TypeError: tuple indices must be integers, not str

我需要找到相同的线性插值。我怎么能找到那个?

我有关于时间 a 的值 X,但我想找到时间 b 的插值。 对于每个 a[i] 和 b[i] ,线性插值会给我 3 个点,就像 X 中的一样?

【问题讨论】:

标签: python numpy scipy


【解决方案1】:

你把论据的顺序弄错了。 Flowing是interp1d的帮助信息,查看一下:

interp1d(x, y, kind='linear', axis=-1, copy=True, bounds_error=True,fill_value=np.nan)

插入一维函数。

xy 是用于逼近某个函数 f 的值数组: y = f(x).

该类返回一个函数,其调用方法使用插值 找到新点的值。

【讨论】:

  • 这个阶段之后我会得到一个对象。我将如何使用该对象来获取值?
【解决方案2】:

interp1d 是一个函数,它的返回值是一个新函数。然后可以使用给定插值范围内的值调用这个新函数:

from scipy.interpolate import interp1d

x1 = [ 0.,          0.04007922,  0.04723573,  0.05440107,  0.06178645,  0.06837938]
x2 = [ 0.,          0.00502513,  0.01005025,  0.01507538,  0.0201005,   0.02512563]
f = interp1d(x1, x2)

f([0.0, 0.01, 0.02, 0.03, 0.068])
#array([ 0.        ,  0.0012538 ,  0.0025076 ,  0.0037614 ,  0.02483647])

【讨论】:

  • 你能解释一下你为什么以及如何考虑这个价值观吗? f([0.0, 0.01, 0.02, 0.03, 0.068])
  • f 是一个函数,其中x2 = f(x1) 通过插值。因此f(0.0) 返回0.0f(0.068) 返回~0.24。不要被矢量化符号混淆。您所做的是将值列表传递给f,作为回报,您将返回一个值列表,其中f 已应用于列表中的每个单独值。 x1 应命名为 xx2 应命名为 y,以便 y = f(x) 如文档中所述。希望对您有所帮助。
  • 根据您的解释,我更新了问题。你的意思是说我必须在某个地方通过X?我不明白你如何取值 0.068。你能用更新的问题解释一下吗?
  • 我不确定我是否正确理解了您的问题。在您的情况下,Xab 是什么?你的数据是什么?在我的示例中,0.068 只是一个虚构的数字,表明插值有效。也许你可以给我们一个预期输入和预期输出的例子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-09
  • 1970-01-01
  • 2012-03-14
  • 2018-07-25
  • 2013-12-25
  • 1970-01-01
相关资源
最近更新 更多