反转二进制numpy数组

5
有没有一种numpy数组的“逻辑否定”(当然是针对数字的)。
例如,考虑这个数组: x = [1,0,1,0,0,1] 我正在寻找一种简单的方法来计算它的“反转” y = [0,1,0,1,1,0]
4个回答

19

对于由1s0s组成的数组,您可以简单地将x中的值从1中减去:

x = np.array([1,0,1,0,0,1])
1-x
# array([0, 1, 0, 1, 1, 0])

或者你也可以将x中的二进制值与1进行按位异或:
x^1 
# array([0, 1, 0, 1, 1, 0])

为什么要使用1-x?难道不会有一些0变成-1吗?这是因为二进制类型的原因吗?例如uint8? - Franva

5

是的,你可以使用 np.logical_not

np.logical_not(x).astype(int)

输出:

array([0, 1, 0, 1, 1, 0])

5

或者使用异或(XOR):

y =  [n ^ 1 for n in x]

2
这里有一种方法:

可以这样做:

y =  (x == 0).astype(int)

最初的回答
另外一种选择:
y =  0 + (x == 0)

输出:

[0 1 0 1 1 0]

注意事项:
1. (x == 0) 返回一个布尔数组,其中1的位置出现False0的位置出现True。 2. 调用方法astype(int)或将标量0添加到矩阵中,将False转换为0,将True转换为1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接