- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我无法理解如何使用 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
构建它。
reshape
和 transpose
用于将数组从一种形状转换为另一种形状(请参阅 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/
我无法理解如何使用 scipy.interpolate.RegularGridInterpolator 对数据进行整形以评估 nD 数组的插值 View 。 考虑A一个(n1,n2,n3)形状的num
我有 n 个等长数组,其转置对应于 n 维参数空间中的坐标: x = np.array([800,800,800,800,900,900,900,900,900,1000,1000,1000,1000
我正在使用 scipy.interpolate.RegularGridInterpolator 和 method='linear'。获取内插值很简单(参见 https://docs.scipy.org
我对 documentation for scipy.interpolate.RegularGridInterpolator 有点困惑. 举例来说,我有一个函数 f: R^3 => R,它是在单位立方
我在尝试运行大学类(class)的代码时遇到问题。主文件 BASEchange.py 尝试导入 2 个名为“NODE”和“MESHMODEL”的模块。反过来,“MESHMODEL”从 scipy.in
我知道有一个post解释了如何做到这一点,但我认为我按照帖子中概述的步骤进行操作,但仍然出现尺寸错误。 这是我尝试过的: import numpy as np from scipy.interpola
我是一名优秀的程序员,十分优秀!