数组和矩阵之间的numpy梯度不同
numpy gradient different between array and matrix
想求矩阵梯度,结果不一致
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. ]])
这实际上不是矩阵与数组的问题(尽管使用 matrix
是个坏主意,它可能会导致其他问题)。你的img
是一个小dtype,可能是uint8
,计算溢出了。先将其转换为浮点数:
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. ]])
想求矩阵梯度,结果不一致
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. ]])
这实际上不是矩阵与数组的问题(尽管使用 matrix
是个坏主意,它可能会导致其他问题)。你的img
是一个小dtype,可能是uint8
,计算溢出了。先将其转换为浮点数:
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. ]])