如何对numpy.ndarray每一行内的所有元素执行XOR逻辑运算
实现方案
你可以直接用np.logical_xor的reduce方法沿行维度累积计算异或,全程是numpy向量化操作,效率极高,不需要写任何Python层循环:
import numpy as np # 示例输入数组 arr = np.array([[0., 0., 0., 0.], [0., 1., 0., 0.], [0., 1., 0., 0.], [1., 0., 0., 1.], [1., 1., 1., 1.], [1., 1., 1., 1.]]) # 逐行计算所有元素异或,keepdims保持二维列向量格式 result = np.logical_xor.reduce(arr, axis=1, keepdims=True).astype(float)
运行后输出的result结构完全匹配你需要的格式:
array([[0.], [1.], [1.], [0.], [0.], [0.]])
其他可选方案
如果你能确认数组中只有0和1两种取值,也可以用统计行内1的个数模2的方式实现,逻辑上等价于逐位异或:
result = (arr.sum(axis=1, keepdims=True) % 2).astype(float)
说明
reduce方法的作用是将二元逻辑异或操作沿指定轴(axis=1对应行维度)重复应用,直到该维度只剩一个元素,就是整行异或的结果keepdims=True参数保证输出是二维列向量结构,和你要求的输出格式一致,如果不需要二维结构去掉这个参数即可得到一维结果astype(float)是为了匹配输入数组的浮点类型,如果需要布尔值或者整数类型可以自行调整转换规则- 注:你给出的示例输出中
[1., 0., 0., 1.]对应的结果标注为1属于笔误,四个元素异或的实际计算结果为0
内容的提问来源于stack exchange,提问作者ZeeshanShareef
相关产品推荐
相关产品推荐

