python - 如何有效地将 boolean numpy 数组转换为阈值 boolean 数组?

标签 python arrays numpy boolean vectorization

我正在使用 Python 2.7NumPy 处理大型 boolean 值数组。

我有一个数组 A,它是这样的:

>>> A
array([[[False, False, True, True, True],
        [False, False, False, True, True],
        [False, False, True, True, True],
        [False, False, False, True, True],
        [False, False, False, False, True]],

       [[False, True, True, True, True],
        [False, True, True, True, True],
        [False, False, True, True, True],
        [False, True, True, True, True],
        [False, False, True, True, True]]])

我必须像这样把它变成一个 boolean 数组:

>>> B
array([[[True, False, True, True, True],
        [True, True, False, True, True],
        [True, False, True, True, True],
        [True, True, False, True, True],
        [True, True, True, False, True]],

       [[False, True, True, True, True],
        [False, True, True, True, True],
        [True, False, True, True, True],
        [False, True, True, True, True],
        [True, False, True, True, True]]])

因此,想法是每行的最后一个 False 值应该保留,任何其他值都应该变为 True。 我需要创建它以便将其用作另一个数组的掩码。

有没有办法在不使用 for 循环的情况下使用 NumPy 来做到这一点(这很慢)?

最佳答案

您也可以为此目的使用异或运算符 ^。只需将数组“左移”一位并将 True 值添加到右侧,然后对新数组和旧数组进行异或运算:

A = np.array([[False, False, True, True, True],
              [False, False, False, True, True],
              [False, False, True, True, True],
              [False, False, False, True, True],
              [False, False, False, False, True]])

X = np.hstack((A[:,1:], 
               np.array(np.ones((A.shape[0], 1)), dtype=np.bool))))
>>> array([[False, True, True, True, True],
           [False, False, True, True, True],
           [False, True, True, True, True],
           [False, False, True, True, True],
           [False, False, False, True, True]])

np.invert(A ^ X)
>>> array([[True, False, True, True, True],
           [True, True, False, True, True],
           [True, False, True, True, True],
           [True, True, False, True, True],
           [True, True, True, False, True]])

这仅在所有 False 值都被保留且后面仅跟有 True 值时有效。

关于python - 如何有效地将 boolean numpy 数组转换为阈值 boolean 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26545198/

相关文章:

javascript - .match 数组值未定义

javascript - 循环遍历数组并打印特定范围的值?

pandas - 将数字上限/阈值应用于 pandas 数据框

android - Python:解压android备份?

Python 日志查看器 GUI

python - 使用 Python 抓取价格列表

python - request.post python 的 json 连接

javascript - 将数组值映射到对象键值

python - 将 numpy 数组中的特定值转换为 NAN

python - 过滤后的 Numpy 数组更改维数