【问题标题】:Getting the top N values and their coordinates from a 2D Numpy array [duplicate]从 2D Numpy 数组中获取前 N 个值及其坐标
【发布时间】:2020-09-16 00:49:54
【问题描述】:

我有一个形状为 (851, 851) 的二维 numpy 数组“bigrams”,其中包含浮点值。我想从这个数组中获取前十个值,我想要它们的坐标。

我知道np.amax(bigrams) 可以返回单个最高值,所以这基本上是我想要的,但然后是前十名。

作为一个 numpy-noob,我编写了一些代码,使用循环获取每行的最高值,然后使用 np.where() 获取坐标,但我觉得必须有更聪明的方法来解决这个问题..

【问题讨论】:

  • 你能发布一个小数组和预期的输出吗?

标签: python numpy


【解决方案1】:

您可以展平并使用 argsort。

idxs = np.argsort(bigrams.ravel())[-10:]
rows, cols = idxs//851, idxs%851
print(bigrams[rows,cols])

另一种方法是使用 argpartition 进行部分排序。

partition = np.argpartition(bigrams.ravel(),-10)[-10:]
max_ten = bigrams[partition//851,partition%851]

您将获得前十个值及其坐标,但不会对其进行排序。如果需要,您可以稍后对这个包含十个值的较小数组进行排序。

【讨论】:

  • 谢谢!这就是我需要的。我发现您也可以使用np.unravel_index() 来返回原始二维数组的坐标。这对我来说更具描述性。
猜你喜欢
  • 2015-10-26
  • 1970-01-01
  • 2022-08-19
  • 1970-01-01
  • 1970-01-01
  • 2016-11-05
  • 1970-01-01
  • 2017-01-16
  • 2023-01-25
相关资源
最近更新 更多