Python Numpy索引第一布尔值

Python Numpy索引第一布尔值,python,numpy,Python,Numpy,在布尔数组中,我试图获取第一个True的列索引。argmax至少使用一个True,但可以理解max(False)为0。我想知道如果有一个非常大的数组,最好的方法是什么 name = np.array(['a', 'b', 'c', 'd']) boolarr = np.array([[True, False, False, True], [False, False, True, True], [False, Fals

在布尔数组中,我试图获取第一个True的列索引。argmax至少使用一个True,但可以理解max(False)为0。我想知道如果有一个非常大的数组,最好的方法是什么

name = np.array(['a', 'b', 'c', 'd'])
boolarr = np.array([[True, False, False, True],
                    [False, False, True, True],
                    [False, False, False, False]])
colidx = np.argmax(boolarr,axis=1)
print(name[colidx]) #result: ['a', 'c', 'a'] desired: ['a', 'c', None]

无法更改
argmax
的行为,因为所有
False
的行的最大值为0。但是,您可以使用
any
来确定包含所有
False
的行,并使用
np。其中
来屏蔽您的结果:

out = name[colidx]
np.where(boolarr.any(1), out, None)

array(['a', 'c', None], dtype=object)