使用 NumPy 从矩阵中获取最小/最大 n 值和索引的有效方法

2024-01-10

给定 NumPy 矩阵(二维数组),返回最小值/最大值的有效方法是什么n数组中的值(及其索引)?

目前我有:

def n_max(arr, n):
    res = [(0,(0,0))]*n
    for y in xrange(len(arr)):
        for x in xrange(len(arr[y])):
            val = float(arr[y,x])
            el = (val,(y,x))
            i = bisect.bisect(res, el)
            if i > 0:
                res.insert(i, el)
                del res[0]
    return res

这比图像模板匹配算法花费的时间长三倍pyopencv确实生成了我想要运行它的数组,我认为这很愚蠢。


自其他答案以来,NumPy 添加了numpy.partition http://docs.scipy.org/doc/numpy/reference/generated/numpy.partition.html and numpy.argpartition http://docs.scipy.org/doc/numpy/reference/generated/numpy.argpartition.html部分排序的函数,允许您在O(arr.size)时间,或O(arr.size+n*log(n))如果您需要按排序顺序排列的元素。

numpy.partition(arr, n)返回一个大小为的数组arr哪里的n如果数组已排序,则第一个元素就是该元素。所有较小的元素都位于该元素之前,所有较大的元素都位于该元素之后。

numpy.argpartition is to numpy.partition as numpy.argsort is to numpy.sort.

以下是如何使用这些函数来查找最小值的索引n二维的元素arr:

flat_indices = numpy.argpartition(arr.ravel(), n-1)[:n]
row_indices, col_indices = numpy.unravel_index(flat_indices, arr.shape)

如果您需要按顺序排列索引,那么row_indices[0]是最小元素的行,而不仅仅是其中之一n最小元素:

min_elements = arr[row_indices, col_indices]
min_elements_order = numpy.argsort(min_elements)
row_indices, col_indices = row_indices[min_elements_order], col_indices[min_elements_order]

一维情况要简单得多:

# Unordered:
indices = numpy.argpartition(arr, n-1)[:n]

# Extra code if you need the indices in order:
min_elements = arr[indices]
min_elements_order = numpy.argsort(min_elements)
ordered_indices = indices[min_elements_order]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 NumPy 从矩阵中获取最小/最大 n 值和索引的有效方法 的相关文章

  • 在 Python 中从 Excel 复制 YEARFRAC() 函数

    因此 我使用 python 来自动执行一些必须在 Excel 中执行的重复任务 我需要做的计算之一需要使用yearfrac 这在Python中被复制了吗 I found this https lists oasis open org arc
  • 列表推导式和 for 循环中的 Lambda 表达式[重复]

    这个问题在这里已经有答案了 我想要一个 lambda 列表 作为一些繁重计算的缓存 并注意到这一点 gt gt gt j for j in lambda i for i in range 10 9 9 9 9 9 9 9 9 9 9 Alt
  • 如何从 python 脚本执行 7zip 命令

    我试图了解如何使用 os system 模块来执行 7zip 命令 现在我不想用 Popen 或 subprocess 让事情变得复杂 我已经安装了 7zip 并将 7zip exe 复制到我的用户文件夹中 我只想提取我的测试文件 inst
  • 使用 ElementTree 在 python 中解析 xml

    我对 python 很陌生 我需要解析一些脏的 xml 文件 这些文件需要先清理 我有以下 python 代码 import arff import xml etree ElementTree import re totstring wit
  • Flymake的临时文件可以在系统临时目录下创建吗?

    我目前正在使用以下代码在 emacs 中连接 Flymake 和 Pyflakes defun flymake create temp in system tempdir filename prefix make temp file or
  • 当跳转在 32 字节上不完全对齐时,使用 MITE(传统管道)代替 DSB(微指令缓存)

    这个问题曾经是这个 现已更新 问题 https stackoverflow com questions 59883527 unrolling 1 cycle loop reduces performance by 25 on skylake
  • 如何创建增量加载网页

    我正在编写一个处理大量数据的页面 它会永远持续到我的结果页面加载 几乎无限 因为返回的数据太大了 因此 我需要实现一个增量加载页面 例如 url 中的页面 http docs python org http docs python org
  • 类返回语句不打印任何输出

    我正在学习课程 但遇到了问题return语句 它是语句吗 我希望如此 程序什么也没有打印出来 它只是结束而不做任何事情 class className def createName self name self name name def
  • Gekko - 最佳调度的不可行解决方案,与 gurobi 的比较

    我对 Gurobi 有点熟悉 但转向 Gekko 因为后者似乎有一些优势 不过 我遇到了一个问题 我将用我想象的苹果园来说明这一问题 5周的收获期 horizon T 5 就在我们身上 我的 非常微薄的 产出将是 3 0 7 0 9 0 5
  • SQLAlchemy 与 count、group_by 和 order_by 使用 ORM

    我有几个函数需要使用 count group by 和 order by 进行一对多连接 我使用 sqlalchemy select 函数生成一个查询 该查询将返回一组 id 然后我对其进行迭代以对各个记录执行 ORM 选择 我想知道是否有
  • 使用 python 将 CSV 文件上传到 Microsoft Azure 存储帐户

    我正在尝试上传一个 csv使用 python 将文件写入 Microsoft Azure 存储帐户 我已经发现C sharp https blogs msdn microsoft com jmstall 2012 08 03 convert
  • Python selenium 浏览器 driver.back()

    我创建了一个小屏幕抓取工具 一切似乎都运行良好 信息正在被提取并保存在数据库中 我遇到的唯一问题是有时 Python 不使用driver back 因此它会尝试获取错误页面上的信息并崩溃 我尝试过添加一个time sleep 5 但有时它仍
  • 将二进制图像划分为像素数据“块”

    我使用 Python 和 PIL 作为在二进制图像中嵌入数据的工作的一部分 并且需要分析像素组以确定要操作的适当像素 以便嵌入数据 图像需要被分割成相等的像素数据 块 以供分析 但我正在努力想出一种适当的方法来做到这一点 我尝试过使用 Py
  • python 中的二分搜索奇怪的行为

    请看这段代码 def chop array search lo 0 high len array 1 while lo lt high mid high lo 2 if array mid search return true elif s
  • django npm 和 Node 包架构

    在我加入的项目中 这是以下架构node packages Django project app1 app2 node modules foundation sites grunt static css images js urls py s
  • 替换除引号内的逗号之外的逗号

    Date Time Ref Sen ATN Flow PCB temp Status Battery BC 2015 04 23 12 30 00 779581 908043 15 254 49 31 0 100 2015 04 23 12
  • 带上下文菜单的 QTreeWidget,无法获取正确的项目

    我有以下代码来创建QTreeWidget和一个包含 2 个操作的上下文菜单 import sys from PyQt5 import QtCore QtWidgets class Dialog QtWidgets QDialog def i
  • python 中的高效外积

    当我们必须处理 10k 维的向量时 Python 中的外积看起来相当慢 有人可以告诉我如何在 python 中加速这个操作吗 代码如下 In 8 a shape Out 8 128 In 9 b shape Out 9 32000 In 1
  • python 中的对数 y 轴 bin

    我正在尝试创建数据列的直方图并以对数方式绘制它 y axis 并且我不确定为什么以下代码不起作用 import numpy as np import matplotlib pyplot as plt data np loadtxt foo
  • 加载pickle时出错

    无法加载 pickle 文件 我正在使用 python 3 5 import pickle data pickle load open D ud120 projects final project final project dataset

随机推荐