Python 如何从包含最多3个值的2d numpy数组中获取列索引
我有一个数组:Python 如何从包含最多3个值的2d numpy数组中获取列索引,python,python-3.x,numpy-ndarray,Python,Python 3.x,Numpy Ndarray,我有一个数组: a = np.array([[22,11,44,33,66], [22,11,2,1,66], [1,11,44,22,4], [22,11,88,99,66]]) 作为输出,我想要一个包含最大3个值的索引的数组作为2d数组。例如,上述阵列输出为: array([[4,2,3], [4,0,1], [2,3,1], [3,2,4]]) 要获取数组的顶部
a = np.array([[22,11,44,33,66],
[22,11,2,1,66],
[1,11,44,22,4],
[22,11,88,99,66]])
作为输出,我想要一个包含最大3个值的索引的数组作为2d数组。例如,上述阵列输出为:
array([[4,2,3],
[4,0,1],
[2,3,1],
[3,2,4]])
要获取数组的顶部
k
元素,请单击。由于分区通常为您提供k
最低的元素,因此使用反向索引:
k = 3
top = np.argpartition(a, -k, axis=1)[:, -k:]
如果需要将索引按降序排序,请与结果一起使用:
rows = np.arange(a.shape[0])[:, None]
s = np.argsort(a[rows, top], axis=1)[:, ::-1]
top = top[rows, s]
使用
top
和s
进行索引时,必须使用行
,以确保正确选择所有索引。每行的索引必须颠倒([:,:-1]
)才能获得升序。是否需要对顶部值进行排序?@Josh。这很清楚,除非是我遗漏了什么:每个输出行包含对应输入行的前4个元素的索引。@Madpysicator是的,前3个元素的索引。您下面的解决方案没有给出所需的结果,更新了答案,并提供了修复和原因解释。