我有一个函数,它返回由数字组成的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时才有效。
np.array([True, False, True, True, False])
9udxz4iz1#
您可以尝试:
def to_bin(a): return a == a[:1]
这将为您提供第一个值True,另一个值为False:
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)
7eumitmz2#
假设您希望更高的数字为真:
arr != arr.min()
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])
p4tfgftt4#
你可以将Python的map转换为numpy数组。在这种情况下,0将是False,而正整数将是True
map
a = np.array([0,3,3,0,0,0,3]) np.array(list(map(bool, a))) #array([False, True, True, False, False, False, True])
4条答案
按热度按时间9udxz4iz1#
您可以尝试:
这将为您提供第一个值
True
,另一个值为False
:7eumitmz2#
假设您希望更高的数字为真:
q9yhzks03#
你可以先检查数组中是否只有2个唯一的数字,然后使用较大的数字创建一个布尔数组:
输出:
p4tfgftt4#
你可以将Python的
map
转换为numpy数组。在这种情况下,0将是False
,而正整数将是True