5

在 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:不同数量的值和点

我也读过这个问题和答案,但它是关于标量的向量值函数,显然可以由interp1d.

4

1 回答 1

7

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

points = numpy.array((x, y)).T
values = numpy.array((f1, f2)).T
f = interpolate.LinearNDInterpolator(points, values)
于 2012-09-12T17:00:34.490 回答