【发布时间】:2018-11-28 01:46:29
【问题描述】:
我有一个 2D numpy 数组,只有 0 和 255 值(从黑白图像创建),我想与另一个类似的 2D 数组进行异或。
这些数组中的dtype 是uint8,它们的形状相同。
到目前为止,我能找到的唯一信息和示例涉及一维数组。
我需要在异或之前“展平”这些二维数组吗?如果有,那是怎么做的?
【问题讨论】:
标签: arrays numpy python-2.x
我有一个 2D numpy 数组,只有 0 和 255 值(从黑白图像创建),我想与另一个类似的 2D 数组进行异或。
这些数组中的dtype 是uint8,它们的形状相同。
到目前为止,我能找到的唯一信息和示例涉及一维数组。
我需要在异或之前“展平”这些二维数组吗?如果有,那是怎么做的?
【问题讨论】:
标签: arrays numpy python-2.x
numpy.logical_xor 和 numpy.bitwise_xor 将适用于二维数组,运算符 != 和 ^ 也适用(基本上分别是逻辑和位 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]])
【讨论】:
((a == 255) & (b == 255)) * 255