Python 如何定义RegularGridInterpolator的值
我有n个等长数组,其转置对应于n维参数空间中的坐标:Python 如何定义RegularGridInterpolator的值,python,arrays,numpy,scipy,interpolation,Python,Arrays,Numpy,Scipy,Interpolation,我有n个等长数组,其转置对应于n维参数空间中的坐标: x = np.array([800,800,800,800,900,900,900,900,900,1000,1000,1000,1000,1000]) y = np.array([4.5,5.0,4.5,5.0,4.5,5.0,5.5,5.0,5.5,4.5,5.0,5.5,5.0,5.5]) z = np.array([2,2,4,4,2,2,4,4,4,2,2,4,4,4]) 参数空间中的每个坐标也有一个值: v = np.array
x = np.array([800,800,800,800,900,900,900,900,900,1000,1000,1000,1000,1000])
y = np.array([4.5,5.0,4.5,5.0,4.5,5.0,5.5,5.0,5.5,4.5,5.0,5.5,5.0,5.5])
z = np.array([2,2,4,4,2,2,4,4,4,2,2,4,4,4])
参数空间中的每个坐标也有一个值:
v = np.array([1,2,3,4,5,6,7,8,9,10,11,12,13,14])
我想在网格点之间插值,以获得给定任意xyz
坐标下的v
值,例如[934,5.1,3.3]
我一直在尝试使用scipy.RegularGridInterpolator
,它将(x,y,z)
作为第一个参数,但我不知道如何在每个点构造值的第二个参数
如有任何建议,将不胜感激!谢谢 使用
LinearNDInterpolator
或最接近的Interpolator
,您的输入会更适合:
from scipy.interpolate import LinearNDInterpolator
ex = LinearNDInterpolator((x, y, z), v)
ex((800, 4.5, 2))
#array(1.0)
ex([[800, 4.5, 2], [800, 4.5, 3]])
#array([ 1., 2.])
要使用RegularGridInterpolator
,需要将v
定义为常规数组。例如,假设:
x = np.array([800., 900., 1000.])
y = np.array([4.5, 5.0, 5.5, 6.0])
z = np.array([2., 4.])
数组v
可能类似于:
v = np.array([[[ 1., 2.],
[ 1., 2.],
[ 1., 2.],
[ 1., 2.]],
[[10., 20.],
[10., 20.],
[10., 20.],
[10., 20.]],
[[100., 200.],
[100., 200.],
[100., 200.],
[100., 200.]]])
然后你可以插值:
form scipy.interpolate import RegularGridInterpolator
rgi = RegularGridInterpolator((x, y, z), v)
rgi((850., 4.5, 3.))
#array(8.25)
rgi([[850., 4.5, 3.], [800, 4.5, 3]])
#array([ 8.25, 1.5 ])
“也许有你想要的。”索洛·卡斯特罗有点,但不完全是
RegularGridInterpolator
为您执行插值,速度更快,您可以选择不同的插值方法。我只需要将我的值数组转换成与xyz
参数空间形状相同的网格。