如何为RegularGridInterp定义值

2024-06-28 10:53:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有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])

参数空间中的每个坐标也有一个值:

^{pr2}$

我想在网格点之间插值以获得给定任意xyz坐标的v值,例如[934,5.1,3.3]。在

我一直在尝试使用scipy.RegularGridInterpolator,它将(x,y,z)作为第一个参数,但是我不知道如何在每个点上构造值的第二个参数。在

如有任何建议,我们将不胜感激!谢谢!在


Tags: 网格参数np空间scipy数组array建议
1条回答
网友
1楼 · 发布于 2024-06-28 10:53:59

您的输入更适合LinearNDInterpolatorNearestNDInterpolator

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定义为常规数组。例如,假设:

^{pr2}$

数组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 ])

相关问题 更多 >