gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 13:16:57 26 4
gpt4 key购买 nike

我正在使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com