numpy数组列表中N个最高元素的索引[重复]

Posted

技术标签:

【中文标题】numpy数组列表中N个最高元素的索引[重复]【英文标题】:index of N highest elements from a list of numpy array [duplicate] 【发布时间】:2020-05-30 08:11:15 【问题描述】:

我需要一个函数,它从 numpy 数组的矩阵/列表中返回 N 个最高元素的索引(行和列)。

假设我有以下矩阵:

a = [[4,2,3], 
     [5,0,3]]

我想获取 N 个最高元素的索引(行、列)列表。例如,如果我想要 4 个最高元素的索引,函数应该返回

[(1,0), (0,0), (0,2), (1,2)]

我已经尝试如下实现,但它返回一个(值,行号)列表,这是我不需要的

for i, sub_list in enumerate(a):
    max_list.append((max(sub_list), i))

【问题讨论】:

我认为您的输出中有错误。应该包括(1, 2) 而不是(0, 1),因为 3 > 2 是的,你是对的。我已经修改了问题,谢谢! 这能回答你的问题吗? How do I get indices of N maximum values in a NumPy array? 二维数组也有解决方案。 【参考方案1】:

我会变平,argsortunravel_index


f = a.ravel().argsort()
[*zip(*np.unravel_index(f[-n:], a.shape))]

[(0, 2), (1, 2), (0, 0), (1, 0)]

正如 yatu 所指出的,如果您有一个更大的数组,而n 则比较小,您可以将argsort 替换为np.argpartition(a.ravel(), -n)

【讨论】:

以上是关于numpy数组列表中N个最高元素的索引[重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用argsort结果进行numpy索引[重复]

使用重复索引递增 Numpy 数组

numpy 从索引列表创建 2D 掩码 [+ 然后从掩码数组中绘制]

numpy数组符号化与函数向量化

改变具有奇数索引和的元素的符号

numpy数组中多个元素的索引