python - Numpy 递归比较行中的所有数据

标签 python numpy

我有一个 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/

相关文章:

python - 有没有一种方法可以更改 for 循环中的全局函数而不是创建一个新函数?

python - 如何对数组中相同的值求和

python - numpy 中的通用函数概念和符号

python - 如何检测 UDP 套接字的关闭客户端?

python - 方法在 Python 2 中对 Unicode 友好吗?

python - 如何通过 API 创建带标题的 Imgur 相册?

python - 子命令中选项的 argparse 冲突解决程序将关键字参数转换为位置参数

Python:检查(并计算多少)点位于 voronoi 单元格内的位置

python - 我需要使用 numpy 的矢量化来优化我的双 for 循环

python - 将 log2 转换应用于 pandas DataFrame