在documentation之后:
import matplotlib.pyplot as plt
from scipy import interpolate
import numpy as np
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+yy)
f = interpolate.interp2d(x, y, z, kind='cubic')
我继续评估f:
^{pr2}$输出:
array([ 0.95603946, 0.9589498 , 0.96176018, ..., -0.96443103,
-0.96171273, -0.96171273])
颠倒论点会得到同样的结果!我本以为会得到相反的结果:
xnewrev=np.array(list(reversed(np.arange(-5.01, 5.01, 1e-2))))
f(xnewrev, 0)
输出:
array([ 0.95603946, 0.9589498 , 0.96176018, ..., -0.96443103,
-0.96171273, -0.96171273])
期望:
array([-0.96171273, -0.96171273, -0.96443103, ..., 0.96176018,
0.9589498 , 0.95603946])
在洗牌之后,我也得到相同的结果xnew
。似乎插值函数f
在求值之前对xnew
排序。如何使f
返回值的顺序与输入列表中给定的顺序相同?在
不知何故,这不是interp1d的问题
我使用的是Jupyter笔记本,Python2.7.12 | Anaconda 4.1.1(64位)
基于hpaulj's answer,可以定义一个返回未排序数组的新类,例如
然后,在您的示例中,您将拥有:
^{pr2}$您的
f
可调用参数采用assume_sorted
参数:所以,是的,输入是内部排序的,如果你事先没有排序的话。我看不到坐标的倒数。在
在使用之前,
x
,y
输入到interp2d
也被排序。显然插值计算需要排序数组。在可以使用双
argsort
索引恢复预排序顺序制作一个数组并洗牌:
^{pr2}$获取恢复索引:
测试一下:
相关问题 更多 >
编程相关推荐