Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从包含最多3个值的2d numpy数组中获取列索引_Python_Python 3.x_Numpy Ndarray - Fatal编程技术网

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个元素的索引。您下面的解决方案没有给出所需的结果,更新了答案,并提供了修复和原因解释。