我一直在使用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__