Python 在numpy数组的特定行中,如何查找前3个最大值的列索引
我有一个数组X: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 = 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]