2012-12-22 107 views
2

我有以下幾點來計算矩陣的差異,即第i個元素 - (i-1)元素。Numpy:計算矩陣的邊緣

我該如何(輕鬆地)計算每個元素水平和垂直的差異?隨着轉置?

inputarr = np.arange(12) 
inputarr.shape = (3,4) 
inputarr+=1 

#shift one position 
newarr = list() 
for x in inputarr: 
    newarr.append(np.hstack((np.array([0]),x[:-1]))) 

z = np.array(newarr)  
print inputarr 
print 'first differences' 
print inputarr-z 

輸出

[[ 1 2 3 4] 
[ 5 6 7 8] 
[ 9 10 11 12]] 

first differences 
[[1 1 1 1] 
[5 1 1 1] 
[9 1 1 1]] 

回答

3

退房numpy.diff

從文檔:

計算沿給定軸線的n階離散的差異。

給定軸的一階差分由out[n] = a[n+1] - a[n]沿着 給出,高階差分通過使用差分 遞歸計算。

一個例子:

>>> import numpy as np 
>>> a = np.arange(12).reshape((3,4)) 
>>> a 
array([[ 0, 1, 2, 3], 
     [ 4, 5, 6, 7], 
     [ 8, 9, 10, 11]]) 
>>> np.diff(a,axis = 1) # row-wise 
array([[1, 1, 1], 
     [1, 1, 1], 
     [1, 1, 1]]) 
>>> np.diff(a, axis = 0) # column-wise 
array([[4, 4, 4, 4], 
     [4, 4, 4, 4]])