3

所以我重新創建了他們去年製作的Matlab項目,其中一部分涉及創建拉出RGB波段的遮罩。 他們通過一個邏輯0的數組做了這個。如何將布爾數據類型爲零的numpy數組索引爲True?

GMask_Whole = false(ROWS,COLS); 

我重建爲一個numpy數組。

self.green_mask_whole=np.zeros((self.rows, self.columns), dtype=bool) 

我不能爲我的生活弄清楚如何與numpy的做下一部分:

GMask_Whole(1:2:end,2:2:end) = true; 

我還沒有找到一個numpy的等效操作。有任何想法嗎?

順便說一句,如果你好奇這是什麼做的: https://en.wikipedia.org/wiki/Bayer_filter

編輯: 事情我已經嘗試:

wut(1:3:end, 1:2:end) = true 
wut([1:3:end], [1:2:end]) = true 
wut([1:3], [1:2]) = true 
wut([1:3], [1:2]) = True 
wut(slice(1:3), slice(1:2)) = True 
+0

編輯我原來的職位。 –

回答

1

您可以翻譯Matlab的

GMask_Whole(1:2:end,2:2:end) = true; 

到Python通過

green_mask_whole[::2,1::2] = True 

(假設green_mask_whole是numpy的陣列)

1

numpy可以做切片或多或少在Matlab,但synax是有點不同。在numpy,順序是[begin:end:step]並可以留下兩個beginendstep空,這將給他們各自的默認值第一要素最後一個元素和分別爲步長。另外,'numpy'有一個很好的'廣播轉換'系統,它允許重複一個值(或行/列)來創建一個與另一個值相同的新數組。這可以爲整個數組分配一個值。

因此,在目前的情況下,是可以做到

self.green_mask_whole=np.zeros((self.rows, self.columns), dtype=bool) 
self.green_mask_whole[::2,1::2] = True