gpt4 book ai didi

python - 在另一个常规网格上评估 RegularGridInterpolator

转载 作者:太空宇宙 更新时间:2023-11-03 20:28:32 25 4
gpt4 key购买 nike

我无法理解如何使用 scipy.interpolate.RegularGridInterpolator 对数据进行整形以评估 nD 数组的插值 View 。

考虑A一个(n1,n2,n3)形状的numpy数组,沿着以下坐标索引:

x = np.linspace(0, 10, 5) # n1 = 5
y = np.linspace(-1, 1, 10) # n2 = 10
z = np.linspace(0, 500, 1000) # n3 = 1000

对于此示例,您可以使用文档中的这段代码生成 A = ex_array:

def f(x,y,z):
return 2 * x**3 + 3 * y**2 - z

ex_array = f(*np.meshgrid(x, y, z, indexing='ij', sparse=True))

假设我想沿每个轴插入整个数组。这是通过以下方式完成的:

from scipy.interpolate import RegularGridInterpolator

interpolated = RegularGridInterpolator((x,y,z), ex_array)

现在,我的大脑开始剧烈疼痛的部分:为了在任何给定坐标处评估此插值器对象,您必须在所述点上__call__它,如下所示:

evaluated_pts = interpolated((0,1,0)) # evaluate at (x,y,z) = (5,0.5,300)
print(evaluated_pts)

为了在几个点上对其进行评估,您可以像这样迭代:

pts = ((5,0.5,_z) for _z in np.linspace(100,200,50))
evaluated_pts = interpolated(pts)

现在,如果我想使用与上面相同的逻辑,并对整个新网格进行评估,例如:

new_x = np.linspace(2, 3, 128)
new_y = np.linspace(-0.1, 0.1, 100)
new_z = np.linspace(350, 400, 256)

正如您现在所看到的,它并不像 interpolated(new_x, new_y, new_z) 那么简单,我尝试使用 np.meshgrid 但无法弄清楚。

理想情况下,我希望在此示例中输出一个新的 (128, 100, 256) 数组。

最佳答案

RegularGridInterpolator 输入值位于网格上。网格点是使用沿每个轴的“刻度”元组定义的,例如 ((x0, x1, ..., xn), (y0, y1, ..., xm), (z0, z1, .. ., zk) ) 3D。在本例中,这些值以形状 (n, m, k) 的 nd 数组形式给出。

为了评估插值函数,不再需要点位于网格上的假设。然后,将要求的点定义为点列表(实际上是坐标数组): ((x1, y1, z1), (x2, y2, z2), ... (xP, yP, zP)) 即nd 形状数组(点数,维度数)。

要评估新网格上的插值,必须使用meshgrid构建它。

reshapetranspose 用于将数组从一种形状转换为另一种形状(请参阅 this question)。

例如:

x = [0, 1, 2]
y = [3, 4]
z = [5, 6, 7, 8]

xyz_grid = np.meshgrid(x, y, z, indexing='ij')

xyz_list = np.reshape(xyz_grid, (3, -1), order='C').T

xyz_list

̀xyz_list 可用于调用插值函数,如下所示:

array([[0, 3, 5],
[0, 3, 6],
[0, 3, 7],
[0, 3, 8],
[0, 4, 5],
[0, 4, 6],
[0, 4, 7],
[0, 4, 8],
[1, 3, 5],
[1, 3, 6],
[1, 3, 7],
[1, 3, 8],
[1, 4, 5],
[1, 4, 6],
[1, 4, 7],
[1, 4, 8],
[2, 3, 5],
[2, 3, 6],
[2, 3, 7],
[2, 3, 8],
[2, 4, 5],
[2, 4, 6],
[2, 4, 7],
[2, 4, 8]])

关于python - 在另一个常规网格上评估 RegularGridInterpolator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57659322/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com