2017-05-07 77 views
3

我有11x51布爾矩陣a。在此我在Matlab中執行此操作以獲得大小爲10x50的布爾矩陣。布爾numpy陣列的子矩陣求和

a = logical(a(1:end-1,1:end-1) + a(2:end,1:end-1) + a(1:end-1,2:end) + a(2:end,2:end)) 

我想在python中這樣做。我嘗試這樣做: -

a = np.zeros([11,51], dtype=bool) 
a=a[0:-2,0:-2] + a[1:-1,0:-2] + a[0:-2,1:-1] + a[1:-1,1:-1] 

我結束了9x49矩陣,我不知道它在做什麼預期的操作。

有人能指出錯誤嗎?

+0

'[:-2]'將除去兩個元件 –

回答

2

使用slicing,這將是 -

a_out = (a[:-1,:-1] + a[1:,:-1] + a[:-1,1:] + a[1:,1:]).astype(bool) 

罪ce,a已經是一個布爾數組,我們可以跳過bool轉換。 MATLAB的

樣品運行 - 上NumPy的

>> a = logical([ 
    1, 1, 0, 1, 1, 0 
    0, 1, 0, 0, 0, 0 
    1, 1, 0, 1, 1, 1 
    0, 0, 0, 0, 1, 0 
    0, 0, 1, 0, 1, 1 
    0, 0, 0, 1, 1, 0]); 
>> a(1:end-1,1:end-1) + a(2:end,1:end-1) + a(1:end-1,2:end) + a(2:end,2:end) 
ans = 
    3  2  1  2  1 
    3  2  1  2  2 
    2  1  1  3  3 
    0  1  1  2  3 
    0  1  2  3  3 
>> logical(a(1:end-1,1:end-1) + a(2:end,1:end-1) + ... 
      a(1:end-1,2:end) + a(2:end,2:end)) 
ans = 
    1  1  1  1  1 
    1  1  1  1  1 
    1  1  1  1  1 
    0  1  1  1  1 
    0  1  1  1  1 

樣品運行 -

In [160]: a # Same data as in MATLAB sample 
Out[160]: 
array([[ True, True, False, True, True, False], 
     [False, True, False, False, False, False], 
     [ True, True, False, True, True, True], 
     [False, False, False, False, True, False], 
     [False, False, True, False, True, True], 
     [False, False, False, True, True, False]], dtype=bool) 

In [161]: (a[:-1,:-1] + a[1:,:-1] + a[:-1,1:] + a[1:,1:]) 
Out[161]: 
array([[ True, True, True, True, True], 
     [ True, True, True, True, True], 
     [ True, True, True, True, True], 
     [False, True, True, True, True], 
     [False, True, True, True, True]], dtype=bool) 
1

在python中切片與Matlab有點不同。在Python嘗試這些:

所有,但最後一個元素:

[:-1] 

所有,但第一個元素:

[1:]