Numpy索引第一个布尔值

时间:2018-10-26 20:36:37

标签: 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, False, False, False]])
colidx = np.argmax(boolarr,axis=1)
print(name[colidx]) #result: ['a', 'c', 'a'] desired: ['a', 'c', None]

1 个答案:

答案 0 :(得分:3)

您无法更改argmax的行为,因为所有False 的一行的最大值是0。但是,您可以使用any确定包含所有False的行,并使用np.where掩盖您的结果:

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

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