繁体   English   中英

计算两个2D二进制numpy数组的重叠值以获得特定值

[英]Counting overlapping values of two 2D binary numpy arrays for a specific value

我从两个相同大小的图像开始。 我将它们转换为二进制的黑色/白色numpy数组(0 =黑色1 =白色)。 我想找到多少个黑色像素重叠(两个数组中相同位置的0值)。

我知道如何使用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)

但这不起作用。

您可以对逻辑和使用简单的比较:

>>> 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]])

或者作为注释中建议的一种漂亮的Numpython方式,请使用np.argwhere

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

作为记录,您最初的尝试只是缺少正确的运算符和一些括号:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM