2016-09-16 51 views
2

我從兩個相同大小的圖像開始。我將它們轉換爲二進制黑色/白色numpy陣列(0 =黑色1 =白色)。我想找出有多少黑色像素重疊(兩個陣列中的相同位置處的值爲0)。計算特定值的兩個二進制numpy數組的重疊值

我知道如何用for循環做到這一點,但我正在努力學習如何正確使用numpy,並且我想有更好的方法來做到這一點。

一個最小的例子是如下:

ArrayA:

[ 1 1 0 ] 
[ 1 0 0 ] 
[ 0 1 1 ] 

ArrayB:

[ 1 0 0 ] 
[ 1 1 0 ] 
[ 0 1 1 ] 

我想知道兩個數組有過多少次的 '0' 值相同的位置。

在這種情況下,一次在第一行第三列,一次在第二行第三列,一次在第三行第一列。 「0」值完全重疊:3

我正沿

np.where(arrayA == 0 and arrayB == 0) 

行思考的東西,但不起作用。

+0

你可以添加一個最小的和可覈查的例子,你的問題? – Kasramvd

+0

你嘗試了什麼?你檢查了numpy文檔嗎?我想它可以是這樣的一些布爾操作:https://docs.scipy.org/doc/numpy/reference/routines.bitwise.html#elementwise-bit-operations。類似'invert(bitwise_and(x1,x2))' –

+0

@Kasramvd當然。將其添加到原始問題中。 –

回答

3

您可以使用一個邏輯的簡單比較:

>>> A 
array([[1, 1, 0], 
     [1, 0, 0], 
     [0, 1, 1]]) 
>>> B 
array([[1, 0, 0], 
     [1, 1, 0], 
     [0, 1, 1]]) 
>>> np.logical_and(A == 0, B == 0) 
array([[False, False, True], 
     [False, False, True], 
     [ True, False, False]], dtype=bool) 

而且使用np.where()column_stack(),以獲得預期中的索引:

>>> np.column_stack(np.where(np.logical_and(A == 0, B == 0))) 
array([[0, 2], 
     [1, 2], 
     [2, 0]]) 

或者一個漂亮的Numpythonic如評論中所示使用np.argwhere

>>> np.argwhere(np.logical_and(A == 0, B == 0)) 
array([[0, 2], 
     [1, 2], 
     [2, 0]]) 
+0

完美,這正是我不知道/失蹤的功能。謝謝! –

+0

@JanekNikicicz是的,我看到編輯後;-)。 – Kasramvd

+1

或者只是'np.argwhere()'我想要替換堆棧和'np.where'。 – Divakar

2

爲了記錄在案,你原來的嘗試只是缺乏合適的運營商和一些parentesis:

np.where((arrayA==0) & (arrayB==0))