【问题标题】:numpy gradient different between array and matrix数组和矩阵之间的numpy梯度不同
【发布时间】:2018-08-07 02:35:17
【问题描述】:

我想得到矩阵梯度,结果不一致

g = img[0:3, 0:3]
gy, gx = np.gradient(g)
print gy,gx

arr=np.array([[138, 144, 141],[134, 135, 132],[137, 135, 133]])
gy, gx = np.gradient(arr)
print gy,gx

结果不一样

数据类型:矩阵

gy=array([[252. , 247. , 247. ], [127.5, 123.5, 124. ], [ 3. , 0. , 1. ]])

gx=array([[ 6. , 1.5, 253. ], [ 1. , 127. , 253. ], [254. , 126. , 254. ]])

数据类型:数组

gy=array([[-4. , -9. , -9. ], [-0.5, -4.5, -4. ], [ 3. , 0. , 1. ]])

gx=array([[ 6. , 1.5, -3. ], [ 1. , -1. , -3. ], [-2. , -2. , -2. ]])

【问题讨论】:

  • 我们不知道img的内容。打印出来试试?
  • 我已经解决了我的问题。感谢您的关心

标签: python numpy gradient


【解决方案1】:

这实际上不是矩阵与数组的问题(尽管使用 matrix 是个坏主意,而且可能会导致其他问题)。你的img 是一个小的dtype,可能是uint8,计算溢出了。先转换成float:

np.gradient(g.astype(float))

演示:

In [7]: arr=np.array([[138, 144, 141],[134, 135, 132],[137, 135, 133]])
In [8]: arr_uint8 = arr.astype('uint8')
In [9]: gx, gy = np.gradient(arr_uint8)
In [10]: gx
Out[10]: 
array([[ 252. ,  247. ,  247. ],
       [ 127.5,  123.5,  124. ],
       [   3. ,    0. ,    1. ]])
In [11]: arr_float = arr_uint8.astype(float)
In [12]: gx, gy = np.gradient(arr_float)
In [13]: gx
Out[13]: 
array([[-4. , -9. , -9. ],
       [-0.5, -4.5, -4. ],
       [ 3. ,  0. ,  1. ]])

【讨论】:

  • 是的,你是对的。我一直忽略这个问题。它解决了我的问题。非常感谢
猜你喜欢
  • 2012-12-20
  • 1970-01-01
  • 2013-05-25
  • 1970-01-01
  • 1970-01-01
  • 2019-10-08
  • 2015-09-11
  • 1970-01-01
  • 2019-09-10
相关资源
最近更新 更多