【问题标题】:Python: Calculate the Gradient of a 3D gridPython:计算 3D 网格的梯度
【发布时间】:2012-10-30 14:43:04
【问题描述】:

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

然后我想要每个网格点的标量梯度。在 2D 中,我使用 np.gradient 执行此操作,我得到两个数组,其中 x 和 y 方向的渐变:

gradx, grady = np.gradient(grid)

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

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

谢谢, 丹尼尔

【问题讨论】:

标签: python numpy grid gradient


【解决方案1】:

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

numpy.gradient(f, *varargs)

返回一个 N 维数组的梯度。

梯度是使用内部和内部的中心差计算的 边界处的第一个差异。因此返回的梯度有 与输入数组的形状相同。

参数:

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

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

返回:

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

似乎您应该能够像您期望的那样将您的二维码扩展到 3D。

【讨论】:

  • @japreiss,如果我将一个形状为 (100,3) 的数组传递给渐变,我会得到两个数组,而我期望三个。你知道这两个数组代表什么吗?
  • @duhaime,我相信你早就知道了,但是对于未来的旅行者来说,(100,3)数组是二维数组,所以它返回两个数组——一个是梯度输入数组中相对于第一个轴(即跨行)的点,第二个是相对于第二个轴的梯度(即跨列)。对于 N 维数组,您会得到 N 个数组,每个数组包含所有点相对于 N 轴之一的梯度。
猜你喜欢
  • 2012-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-10
  • 1970-01-01
  • 1970-01-01
  • 2020-10-13
  • 2021-06-12
相关资源
最近更新 更多