【问题标题】:Numpy gradient of 2D array二维数组的numpy梯度
【发布时间】:2018-06-15 11:50:06
【问题描述】:

我有一个正弦模式的二维数组,我想绘制该函数的 x 和 y 梯度。

从以前的一些函数中,我有一个名为“image_data”的二维数组,例如:

def get_image(params):
    # do some maths on params
    return(image)

params = (a, b, c)
image_data = get_image(params)

然后我在图像上使用numpy.gradient 来获得渐变:

gradients = numpy.gradient(image_data)
x_grad = gradients[0]
y_grad = gradients[1]

绘制所有三个看起来像:

但我不确定它是否正确。因为这个图案不是 45 度,所以我希望 x 和 y 的渐变是不同的。

在我看来,x_gradient[i][j] 应该是 image_data[i][j] 相对于两边索引的梯度,而y_gradient[i][j] 应该是相对于上下索引的梯度。

由于图案略微倾斜,您可以在image_data 中看到函数的梯度以不同的速率变化。

我是否误解了我的数据或不理解 numpy.gradient 输出?

谢谢!

【问题讨论】:

  • 我猜你做的一切都是正确的。虽然这两个渐变可能 相同,但从图片中我不认为它们是相同的(尝试print(np.all(x_gradient == y_gradient)))。但即使它们是,根据您的生成函数,这两个梯度当然有可能相同(看起来像 sin(a*x + b*y) - 它具有周期性梯度)

标签: python arrays numpy gradient


【解决方案1】:

我不确定您为什么认为渐变应该不同。但是给定函数的渐变形状应该具有不同级别的相同形状。让我们分析一下:

所以你可以看到它们都有相同的形状。添加颜色级别,您会看到差异。

【讨论】:

  • 这很好。以绝对比例绘制时,值会有所不同,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-20
  • 1970-01-01
  • 2021-01-19
  • 2011-03-04
  • 2022-12-15
  • 2020-07-30
相关资源
最近更新 更多