我有一个 bool 型 numpy 数组,如下所示:
bool_arr = array([[ True, True, True, True],
[False, False, True, True],
[False, False, False, True]], dtype=bool)
我想逐行比较,只为 True
的第一个实例返回 True
,否则返回 False
。所以我想对 bool_arr
进行比较的正确答案是:
ans = array([[ True, False, False, False],
[False, False, True, False],
[False, False, False, True]], dtype=bool)
我想不出没有循环的“Numpy”方法。
最佳答案
您可以沿 axis=1 计算累积和两次,并将第一个 True
值检测为值为 1 的值:
bool_arr.cumsum(axis=1).cumsum(axis=1) == 1
=>
array([[ True, False, False, False],
[False, False, True, False],
[False, False, False, True]], dtype=bool)
注意事项:
- 将算术(例如求和)应用于 bool 值,将它们视为整数 0 和 1
- 仅应用一次
cumsum
将适用于问题中的示例,但不适用于在第一个True
之后立即有False
的情况.第二个cumsum
负责处理这个问题。
关于python - Numpy 递归比较行中的所有数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23480020/