在布尔数组中,我试图获取第一个 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]
Run Code Online (Sandbox Code Playgroud)
您无法更改 的行为argmax,因为包含 all 的行的最大值False 为0。但是,您可以使用any来确定包含 all 的行False,并使用np.where来屏蔽您的结果:
out = name[colidx]
np.where(boolarr.any(1), out, None)
Run Code Online (Sandbox Code Playgroud)
array(['a', 'c', None], dtype=object)
Run Code Online (Sandbox Code Playgroud)