【问题标题】:How to get first 5 maximum values from numpy array in python?如何从python中的numpy数组中获取前5个最大值?
【发布时间】:2022-07-27 02:58:59
【问题描述】:
x = np.array([3, 4, 2, 1, 7, 8, 6, 5, 9])

我想以array([9,8,7,6,5]) 及其索引array([8,5,4,6,7]) 获得答案。

我试过np.amax,它只提供一个值。

【问题讨论】:

  • np.partitionnp.sort。如果您需要索引,请参阅 np.argpartitionnp.argsort

标签: python arrays numpy max numpy-ndarray


【解决方案1】:

您可以这样做(为清楚起见,每个步骤都经过注释):

import numpy as np
x = np.array([3, 4, 2, 1, 7, 8, 6, 5, 9])

y = x.copy() # <----optional, create a copy of the array
y = np.sort(x) # sort array
y = y[::-1] # reverse sort order
y = y[0:5] # take a slice of the first 5
print(y)

结果:

[9 8 7 6 5]

【讨论】:

  • 感谢您的回答。这非常简单,但不幸的是,我正在处理像素,我不想通过排序弄乱数组的主要索引。请您推荐其他方法吗?
  • 如果你愿意,你可以创建一个数组的副本,这样新数组就不会干扰旧数组。它实际上就像这样简单:new_list = old_list.copy()。我添加了一行代码以将其反映到答案中。
【解决方案2】:

您可以使用np.argsort 来获取排序后的索引。任何通过-x,您都可以按降序获得它们:

indices = np.argsort(-x)

您可以通过以下方式获取数字:

sorted_values = x[indices]

然后,您可以通过以下方式获得前 5 名的部分:

top5 = sorted_values[:5]

【讨论】:

  • 感谢您的回答。你能建议其他方法吗?我在这里处理像素,所以我不想通过排序弄乱主要索引。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-18
  • 1970-01-01
  • 2021-05-06
  • 1970-01-01
相关资源
最近更新 更多