python - 从 2D Numpy 数组中获取前 N 个值及其坐标
问题描述
我有一个形状为 (851, 851) 的二维 numpy 数组“bigrams”,里面有浮点值。我想从这个数组中获取前十个值,我想要它们的坐标。
我知道这np.amax(bigrams)
可以返回单个最高值,所以这基本上是我想要的,但然后是前十名。
作为一个 numpy-noob,我使用循环编写了一些代码来获取每行的最高值,然后使用np.where()
来获取坐标,但我觉得必须有一个更聪明的方法来解决这个问题..
解决方案
您可以展平并使用 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]
您将获得前十个值及其坐标,但不会对其进行排序。如果需要,您可以稍后对这个包含十个值的较小数组进行排序。
推荐阅读
- python - Python 并行化简单的 For 循环
- python - 在 Python 中合并/组合 2 个数据框,将数据框 1 中的行替换为数据框 2 中 2 列中的重复值
- google-sheets - ArrayFormula 布尔值并返回误报
- apache-spark - 使用 kerberos 的 Spark(非 root 安装,不同的 krb5.conf 位置),即使在 spark-env.sh 中设置 spark_submit_opts 后也无法找到 kdc
- javascript - 从复杂的 Response 对象中提取数据
- c++ - 归并排序算法中的引用数组产生原始数组中不存在的值
- php - Tpay 付款通知在 Cakephp 中不起作用
- c# - 如何在布尔属性为空时为其提供默认值
- javascript - 如何将函数转换为函数文件夹内的异步函数
- javascript - AssertionError [ERR_ASSERTION]:缺少预期的拒绝(错误)