二维数组上的 numpy logical.xor

numpy logical.xor on a 2D array

我有一个只有 0255 值(从黑白图像创建)的二维 numpy 数组,我想与另一个类似的二维数组进行异或。

这些数组的dtypeuint8,形状完全相同

到目前为止,我能找到的唯一信息和示例是处理一维数组的。

在异或运算之前,我是否需要 'flatten' 这些二维数组?如果是这样,那是怎么做到的?

numpy.logical_xor and numpy.bitwise_xor 将适用于二维数组,运算符 !=^(本质上分别是逻辑异或和按位异或)也是如此。

编辑:我刚刚在您的标题中注意到您正在寻找逻辑异或,但我会保留按位信息以供参考,以备不时之需。

设置:

a = np.random.choice([0,255], (5,5))
b = np.random.choice([0,255], (5,5))

>>> a
array([[255, 255,   0, 255, 255],
       [255, 255,   0, 255,   0],
       [255,   0,   0,   0,   0],
       [  0, 255, 255, 255, 255],
       [  0,   0, 255,   0,   0]])
>>> b
array([[  0, 255, 255, 255, 255],
       [255,   0,   0, 255,   0],
       [255,   0, 255,   0, 255],
       [  0,   0,   0,   0,   0],
       [255,   0,   0,   0, 255]])

逻辑异或:

>>> np.logical_xor(a,b)
array([[ True, False,  True, False, False],
       [False,  True, False, False, False],
       [False, False,  True, False,  True],
       [False,  True,  True,  True,  True],
       [ True, False,  True, False,  True]])

# equivalently:
>>> a!=b
array([[ True, False,  True, False, False],
       [False,  True, False, False, False],
       [False, False,  True, False,  True],
       [False,  True,  True,  True,  True],
       [ True, False,  True, False,  True]])

按位异或:

>>> np.bitwise_xor(a,b)
array([[255,   0, 255,   0,   0],
       [  0, 255,   0,   0,   0],
       [  0,   0, 255,   0, 255],
       [  0, 255, 255, 255, 255],
       [255,   0, 255,   0, 255]])

# equivalently:
>>> a^b
array([[255,   0, 255,   0,   0],
       [  0, 255,   0,   0,   0],
       [  0,   0, 255,   0, 255],
       [  0, 255, 255, 255, 255],
       [255,   0, 255,   0, 255]])