【发布时间】:2018-02-12 21:19:16
【问题描述】:
我正在搜索等效的 Matlab 命令
Vq = interp3(X,Y,Z,V,Xq,Yq,Zq)
在 Python 中。在 Matlab 中,我可以使用方法“样条”插值,我在 python 中找不到 3D 数据。存在 scipy.interpolate.griddata,但没有 3D 数据样条选项。
我要插值的数据是一个 3D 矩阵 (51x51x51),它有规律地分布在 3D 网格上。
scipy.interpolate.Rbf 可能是选项,但我不明白它的工作原理:
xi = yi = zi = np.linspace(1, 132651, 132651)
interp = scipy.interpolate.Rbf(xi, yi, zi, data, function='cubic')
导致内存错误。
编辑: 我想要的一个最小的例子(没有插值): Matlab代码
v=rand([51,51,51]);
isosurface (v, 0.3);
为简单起见,我在此示例中使用随机数据。我想制作等值面图(特别是费米曲面图)。由于某些结构非常小,因此需要 51x51x51 的高网格分辨率。
进一步说明:矩阵中的数据集是相互独立的,z(或第 3 个分量)不是 x 和 y 的函数。
【问题讨论】:
-
内存错误可能与您的数据大小有关。你为什么使用
interpolate.Rbf?scipy等同于interp3更有可能是griddata、docs.scipy.org/doc/scipy-0.14.0/reference/generated/…。 -
griddata 仅在 2D 中支持(三次)样条线(请参阅您的链接)。 docs.scipy.org/doc/scipy/reference/generated/…,interpolate.Rbf 好像没有这个限制。
-
没错,没有检查立方。但是 Rbf 似乎可以工作 - 由于您遇到内存错误,您是否尝试过较小的数据集?
-
“我不能使用 scipy.interpolate.Rbf,因为我有 5,000 多个数据点。”根据stackoverflow.com/questions/39880747/…。由于我有 132000 点,这不是一个选项。在 Matlab 中,样条插值适用于更高的数据集。也许 ndimage.map_coordinates 是一个选项(docs.scipy.org/doc/scipy/reference/generated/…),但我还没有理解。
标签: python interpolation cubic-spline