首页 > 解决方案 > 从 2D Numpy 数组中获取前 N 个值及其坐标

问题描述

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

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

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

标签: pythonnumpy

解决方案


您可以展平并使用 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]

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


推荐阅读