在Python中,我正在尝试构建一个在多维(5+)参数空间中插入向量值数据的例程。即我有一个函数,它接受许多输入变量并返回许多输出变量。目前,对向量的每个元素都有一个调用。数据位于圆柱文件中,因此我使用
检索它import numpy
[x_data,y_data,f1_data,f2_data] = numpy.loadtxt('data',unpack=True)
然后,我使用SciPy函数实例化单个插值器,如
from scipy import interpolate
f1 = interpolate.LinearNDInterpolator((x_data,y_data),f1_data)
f2 = interpolate.LinearNDInterpolator((x_data,y_data),f2_data)
...
现在,当我进行插值调用时,我必须为每个值f1
,f2
等进行插值,即使它确实应该可以作为一个操作实现。而且我猜测进行一次插值应该比制作5次或更多次更快。
有没有办法构建矢量(或数组)值插值器?
我尝试用
构建插值器f = interpolate.LinearNDInterpolator((x_data,y_data),(f1_data,f2_data,...))
但它返回错误
ValueError:不同数量的值和点
我也读过this question and answer,但它是关于标量的向量值函数,显然可以由interp1d
处理。
答案 0 :(得分:6)
scipy.interpolate.LinearNDInterpolator
期望以行主顺序接收其数据:例如,在您的情况下,第一个参数需要是一对数组,而不是一对数组。由于您在加载数据时转置了数据,因此在将数据传递给LinearNDInterpolator
之前,您必须将其重新转置。尝试类似:
points = numpy.array((x, y)).T
values = numpy.array((f1, f2)).T
f = interpolate.LinearNDInterpolator(points, values)