scipy.interpolate.interp2d 可以处理的数据量有限制吗? --> 大向量的错误结果

is there a limit to how much data scipy.interpolate.interp2d can handle? --> wrong results with large vectors

我一直在使用 scipy.interpolate.interp2d 来计算 131x29344 网格的结果。 不幸的是,将如此大的向量插入插值函数时似乎出现了问题。结果与较小向量中相同数字的结果不同。

例如:

# setting up a function 
from scipy import interpolate
x = np.arange(-5.01, 5.01, 0.25)
y = np.arange(-5.01, 5.01, 0.25)
xx, yy = np.meshgrid(x, y)
z = np.sin(xx**2+yy**2)
f = interpolate.interp2d(x, y, z, kind='cubic')

现在定义了两个向量:

vec1 = np.arange(0,1.31,0.01)
vec2 = np.random.rand(29344) #note, if vec 2 is just np.arange(0,29344), there is no problem
vec3 = np.arange(0,29344)

现在我们可以测试函数是否可以处理数据:

my_matrix = f(vec1,vec2)
#now the following statement should be true but it is not
f(vec1,vec2[10000]) == my_matrix[10000]

但是

my_matrix2 = f(vec1,vec3)
f(vec1,vec3[10000]) == my_matrix2[10000]
#is true

有谁知道为什么会出现这个问题或者如何解决?遍历这些值会占用太多时间。

问题已解决。 被调用函数对输入向量进行排序。因此,结果的排序不等于输入数据。所以基本上如果我们有 vec1 = [1,2,3] 和 vec2 = [5,2,3],f(vec1,vec2) 将在给出输出之前对向量进行排序。因此,输出将为 f([1,2,3],[2,3,5]),这当然会导致不同的结构。 参见:https://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.interp2d.__call__.html#scipy.interpolate.interp2d.__call__