Python 在numpy数组的特定行中,如何查找前3个最大值的列索引

Python 在numpy数组的特定行中,如何查找前3个最大值的列索引,python,arrays,numpy,Python,Arrays,Numpy,我有一个数组X: X = np.array([[4, 3, 5, 2], [9, 6, 7, 3], [8, 6, 7, 5], [3, 4, 5, 3], [5, 3, 2, 6]]) 我想要索引为1的一行中前3个最大值的索引。其结果将是: [0,2,1] 我对Python比较陌生。我尝试使用argsort进行此操作,但无法对某一特定行执行此操作。您可以使用axis=1(按行)上

我有一个数组X:

X = np.array([[4, 3, 5, 2],
              [9, 6, 7, 3],
              [8, 6, 7, 5],
              [3, 4, 5, 3],
              [5, 3, 2, 6]])
我想要索引为1的一行中前3个最大值的索引。其结果将是:

[0,2,1]

我对Python比较陌生。我尝试使用argsort进行此操作,但无法对某一特定行执行此操作。

您可以使用
axis=1
(按行)上的
argsort
,然后提取每行的最后3个索引:

X.argsort(axis=1)[:,:-4:-1]

#[[2 0 1]
# [0 2 1]
# [0 2 1]
# [2 1 3]
# [3 0 1]]
输出:

[0, 2, 1]

对于足够大的阵列,将是最有效的解决方案。它将把排序索引的最后三个元素放在正确的位置:

i = np.argpartition(x[1], [-3, -2, -1])[:-4:-1]

其行为与类似,只是只有选定的索引位于正确的位置。所有其他元素仅保证位于相对于每个分区点的正确一侧,而不是确切位置。

我不确定如何从5x4矩阵中获得结果
[0,2,1]
。对于索引1,你不应该有4吗results@Kenan这是第1行中三个最大项目的索引结果。您实际尝试了什么?展示那些没有尝试就不起作用的东西,这个问题听起来像“我是新来的,给我一个codez”,这是离题的。@G.Anderson。说得对。wayArgpartition是一个更有效的调用,这当然会减少混淆,但是可能
X.argpartition(-3)[:,:-4:-1]
因此它适用于整个数组。@Psidom。当然但是,如果希望实际对索引进行排序,则需要显式地包含所有索引
i = np.argpartition(x[1], [-3, -2, -1])[:-4:-1]