在一个布尔数组中,我试图获取第一个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]
答案 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)