【发布时间】:2017-02-04 09:45:44
【问题描述】:
我想在不同模型之间进行插值。为方便起见,我的数据如下所示:
我有 10 种不同的模拟(我称之为z)。对于每个z,我都有一个array x 和一个array y(对于给定的z,len(x)=len(y))。
例如:
对于z=1:x.shape=(1200,) 和 y.shape=(1200,)
对于z=2:x.shape=(1250,) 和 y.shape=(1250,)
对于z=3:x.shape=(1236,) 和 y.shape=(1236,)
等等……
我想进行插值,以便对于给定的z 和x,我得到y。例如,对于z=2.5 和x=10**9,代码输出y。我假设:
y = a*x + b*z + c 我当然不知道a、b 和c。
我的问题是如何将数据存储在网格中?我很困惑,因为对于不同的z,x 和y 的大小不同。怎么可能建立一个网格?
更新
我能够部分解决我的问题。我首先做的是使用interp1d 在x 和y 之间进行插值。它工作得很好。然后,我创建了x 和y 值的新网格。简单来说方法是:
f = interp1d(x, y, kind='linear')
new_x = np.linspace(10**7, 4*10**9, 10000)
new_y = f(new_x)
然后我对x、y 和z 进行插值:
ff = LinearNDInterpolator( (x, z), y)
为了测试该方法是否有效,这里有一个带有z=3 的图。
在x=10**8 之前,情节看起来不错。事实上,这条线偏离了原始模型。这是我进一步放大时的情节:
x > 10**8 时插值明显不好。我该如何解决?
【问题讨论】:
-
x 之间有标准间距吗?网格是必要的,还是只是简单的查找?如果只是简单的查找,您可以将所有内容放在
dict的dict中,如my_y = ys[my_z][my_x] -
This 可能类似。
-
@rbierman,网格是必要的,因为我想在不同模型之间进行插值。
x之间没有标准间距,它们是随机的。 -
@aloha 好的,这听起来是个难题。你能解释一下为什么你在上面设置
z=2.5,我认为z是模拟数字(一个int)?模型之间的插值是否意味着将模型平均在一起?如果它们不共享 x,则在比较模型与模型之前,您必须在每个模型中进行某种插值。 -
@rbierman,我以
z=2.5为例,我可以说z=2.3546372。这是一个完全随机的数字。这些模型没有共享相同的x。我想先尝试在x和y之间进行插值,然后再包括z。 Andra 的链接与我正在寻找的类似。
标签: python interpolation linear-interpolation