numpy 将任何二进制组合转换为布尔值

thigvfpy  于 2023-03-30  发布在  其他
关注(0)|答案(4)|浏览(237)

我有一个函数,它返回由数字组成的numpy数组。这些数字总是两个不同的数字,例如:

np.array([0,3,3,0,0,0,3])
np.array([1,4,1,1,1,4,4])
np.array([0,3,3,0,0,0,3])

如何将这些二进制数字组合转换为布尔值,即np.array([True, False, True, True, False])
我一直在玩很多东西,但似乎只有当数字已经是0和1时才有效。

9udxz4iz

9udxz4iz1#

您可以尝试:

def to_bin(a):
    return a == a[:1]

这将为您提供第一个值True,另一个值为False

to_bin(np.array([0,3,3,0,0,0,3]))
# array([ True, False, False,  True,  True,  True, False])

to_bin(np.array([1,4,1,1,1,4,4])),
# array([ True, False,  True,  True,  True, False, False])

to_bin(np.array([0,3,3,0,0,0,3])))
# array([ True, False, False,  True,  True,  True, False])

to_bin(np.array([]))
# array([], dtype=bool)
7eumitmz

7eumitmz2#

假设您希望更高的数字为真:

arr != arr.min()
q9yhzks0

q9yhzks03#

你可以先检查数组中是否只有2个唯一的数字,然后使用较大的数字创建一个布尔数组:

import numpy as np

def to_boolean(arr: np.ndarray) -> np.ndarray:
    unique_numbers = np.unique(arr)
    if len(unique_numbers) != 2:
        raise ValueError("The input array must contain exactly two unique numbers.")
    return arr == unique_numbers.max()

print(f'{to_boolean(np.array([0, 3, 3, 0, 0, 0, 3])) = }')
print(f'{to_boolean(np.array([1, 4, 1, 1, 1, 4, 4])) = }')
print(f'{to_boolean(np.array([0, 3, 3, 0, 0, 0, 3])) = }')

输出:

to_boolean(np.array([0, 3, 3, 0, 0, 0, 3])) = array([False,  True,  True, False, False, False,  True])
to_boolean(np.array([1, 4, 1, 1, 1, 4, 4])) = array([False,  True, False, False, False,  True,  True])
to_boolean(np.array([0, 3, 3, 0, 0, 0, 3])) = array([False,  True,  True, False, False, False,  True])
p4tfgftt

p4tfgftt4#

你可以将Python的map转换为numpy数组。在这种情况下,0将是False,而正整数将是True

a = np.array([0,3,3,0,0,0,3])
np.array(list(map(bool, a)))
#array([False,  True,  True, False, False, False,  True])

相关问题