向量值多变量函数的插值

时间:2012-09-12 15:35:17

标签: python interpolation

在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)
...

现在,当我进行插值调用时,我必须为每个值f1f2等进行插值,即使它确实应该可以作为一个操作实现。而且我猜测进行一次插值应该比制作5次或更多次更快。

有没有办法构建矢量(或数组)值插值器?

我尝试用

构建插值器
f = interpolate.LinearNDInterpolator((x_data,y_data),(f1_data,f2_data,...))

但它返回错误

  

ValueError:不同数量的值和点

我也读过this question and answer,但它是关于标量的向量值函数,显然可以由interp1d处理。

1 个答案:

答案 0 :(得分:6)

scipy.interpolate.LinearNDInterpolator期望以行主顺序接收其数据:例如,在您的情况下,第一个参数需要是一对数组,而不是一对数组。由于您在加载数据时转置了数据,因此在将数据传递给LinearNDInterpolator之前,您必须将其重新转置。尝试类似:

points = numpy.array((x, y)).T
values = numpy.array((f1, f2)).T
f = interpolate.LinearNDInterpolator(points, values)