【问题标题】:numpy logical.xor on a 2D array二维数组上的 numpy logical.xor
【发布时间】:2018-11-28 01:46:29
【问题描述】:

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

这些数组中的dtypeuint8,它们的形状相同。

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

我需要在异或之前“展平”这些二维数组吗?如果有,那是怎么做的?

【问题讨论】:

    标签: arrays numpy python-2.x


    【解决方案1】:

    numpy.logical_xornumpy.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]])
    

    【讨论】:

    • 事实证明,按位异或 正是我想要的! :) 我很感激!
    • 有没有返回两个二维数组交集的numpy函数?
    • 这种情况下的交叉点是什么意思?
    • 返回一个仅包含 255 个值的数组,这些值仅存在于数组 1 和数组 2 中(位于同一位置)。
    • 在你的情况下,你可以做类似((a == 255) & (b == 255)) * 255
    猜你喜欢
    • 1970-01-01
    • 2011-05-25
    • 2021-01-19
    • 1970-01-01
    • 1970-01-01
    • 2020-07-30
    • 2012-08-29
    • 2018-07-25
    • 2021-03-15
    相关资源
    最近更新 更多