Numpy数值数组是否支持‘逻辑非’操作?如何反转二进制数组
针对数值型Numpy数组的“逻辑非”反转操作方法
当然有简便的方法实现你要的效果!针对由0和1组成的数值型Numpy数组,这里有几个实用的技巧,帮你快速得到反转后的数组:
方法1:直接算术运算 1 - x
这是最直观高效的方法,因为你的数组元素只有0和1,用1减去每个元素刚好实现0和1的互换:
import numpy as np x = np.array([1,0,1,0,0,1]) y = 1 - x print(y) # 输出: [0 1 0 1 1 0]
方法2:使用Numpy的逻辑非函数 np.logical_not()
np.logical_not()会对数组每个元素取逻辑非,不过它返回的是布尔类型数组,要是需要数值型结果,用astype(int)转换即可:
import numpy as np x = np.array([1,0,1,0,0,1]) y = np.logical_not(x).astype(int) print(y) # 输出: [0 1 0 1 1 0]
方法3:按位取反结合位运算(注意适用场景)
按位取反运算符~也能实现,但它是对整数二进制位操作,直接用在int数组上会得到负数(比如~1等于-2),配合& 1保留最低位就能得到0和1的反转:
import numpy as np x = np.array([1,0,1,0,0,1], dtype=int) y = (~x) & 1 print(y) # 输出: [0 1 0 1 1 0]
方法4:使用np.where()条件判断
如果你的数组后续可能出现其他值,np.where()可以精准指定替换规则,灵活性更高:
import numpy as np x = np.array([1,0,1,0,0,1]) y = np.where(x == 1, 0, 1) print(y) # 输出: [0 1 0 1 1 0]
如果只是处理0和1的反转,首推**1 - x**,简洁又高效!
内容的提问来源于stack exchange,提问作者inarighas
相关产品推荐
相关产品推荐

