如何对NumPy布尔数组的整行/整列执行NOT操作?
在NumPy中对布尔数组的整行/整列执行NOT操作的方法
当然可以实现!在NumPy里处理布尔数组的取反操作非常直接,你设想的matrix[:,1].not()虽然不是正确语法,但我们有更简洁的方式达成目标。
先来看你的初始矩阵:
import numpy as np matrix = np.array([[False for i in range(3)] for j in range(2)])
它的输出是:
[[False False False] [False False False]]
对整列执行取反操作
要对第1列(注意NumPy使用0-based索引,这里的第1列对应索引1)取反,你有两种常用方法:
方法1:使用~按位取反操作符(最简洁)
直接对目标列原地修改:
matrix[:, 1] = ~matrix[:, 1]
方法2:使用np.logical_not()函数
如果你更喜欢显式的函数调用风格,也可以这样写:
matrix[:, 1] = np.logical_not(matrix[:, 1])
执行任意一种操作后,矩阵会变成你期望的结果:
[[False True False] [False True False]]
对整行执行取反操作
同理,若要对某一行取反,比如第0行,只需把索引切换到行维度:
# 对第0行原地取反 matrix[0, :] = ~matrix[0, :]
额外提示:非原地修改(生成新数组)
如果你不想改动原矩阵,而是生成一个独立的新数组,可以先复制原矩阵再操作:
new_matrix = matrix.copy() new_matrix[:, 1] = ~new_matrix[:, 1]
这样原矩阵会保持初始状态,新矩阵则是取反后的结果。
内容的提问来源于stack exchange,提问作者Muddassir Ahmed
相关产品推荐
相关产品推荐

