Python:计算 3D 网格的梯度

Dan*_*ise 5 python grid gradient numpy

我有一个粒子立方体,我将其投影到 2D 网格上,通过单元格中的云将粒子投影到网格上,并通过标量对其进行加权。

然后我想要每个网格点的标量梯度。在 2D 中,我正在使用此方法,np.gradient并得到两个具有 x 和 y 方向梯度的数组:

gradx, grady = np.gradient(grid)
Run Code Online (Sandbox Code Playgroud)

有谁知道我如何将其概括为 3 维?3D 中单元格中的云很好,但是我留下了一个形状为 (700, 700, 700) 的网格。

据我所知np.gradient无法处理这个?

谢谢,丹尼尔

jap*_*iss 4

Numpy 文档表明gradient适用于任何维度:

numpy.gradient(f, *varargs)

返回 N 维数组的梯度。

使用内部的中心差和边界的一阶差来计算梯度。因此,返回的梯度具有与输入数组相同的形状。

参数 :

f: array_like.包含标量函数样本的 N 维数组。

*varargs:0、1 或 N 标量,指定每个方向上的样本距离,即:dx、dy、dz...默认距离为 1。

返回:

g: ndarray. N 个与 f 形状相同的数组,给出 f 对于每个维度的导数。

看起来您应该能够像您期望的那样将 2 维代码扩展到 3D。

  • @duhaime,我确信您已经弄清楚了这一点,但对于未来的旅行者来说, (100,3) 数组是二维数组,因此它返回两个数组 - 一个是输入数组中所有点相对于第一个轴(即行上),第二个轴是相对于第二个轴(即列上)的梯度。对于 N 维数组,您将得到 N 个数组,每个数组包含相对于 N 个轴之一的所有点的梯度。 (2认同)