如何从 numpy 多维数组中获取 k 个最大值的索引

2023-11-24

我问了几个问题StackOverflow但找不到相关答案。我想从 a 中获取 k 个最大值的索引numpy ndarray. 这个链接讨论相同但针对一维数组。np.argsort对于二维数组导致元素按行排序。 IE

Note: array elements are not unique.

input:

import numpy as np
n = np.arange(9).reshape(3,3)
>>> n
array([[0, 1, 2],
   [3, 4, 5],
   [6, 7, 8]])
s = n.argsort()
>>> s
array([[0, 1, 2],
   [0, 1, 2],
   [0, 1, 2]], dtype=int32)

Also,

import numpy as np
n = np.arange(9).reshape(3,3)
s = n.argsort(axis=None)
>>>s
array([0, 1, 2, 3, 4, 5, 6, 7, 8], dtype=int32)

但我在这里失去了数组结构,无法恢复元素的原始索引。

任何形式的帮助表示赞赏。


几种方法np.argpartition and np.argsort对于 ndarrays -

def k_largest_index_argpartition_v1(a, k):
    idx = np.argpartition(-a.ravel(),k)[:k]
    return np.column_stack(np.unravel_index(idx, a.shape))

def k_largest_index_argpartition_v2(a, k):
    idx = np.argpartition(a.ravel(),a.size-k)[-k:]
    return np.column_stack(np.unravel_index(idx, a.shape))

def k_largest_index_argsort(a, k):
    idx = np.argsort(a.ravel())[:-k-1:-1]
    return np.column_stack(np.unravel_index(idx, a.shape))

关于两个版本的讨论argpartition

之间的区别k_largest_index_argpartition_v1 and k_largest_index_argpartition_v2就是我们使用的方式argparition。在第一个版本中,我们对输入数组取反,然后使用argpartition获得最小的索引k指数,从而有效地获得最大的k索引,而在第二个版本中,我们得到第一个a.size-k最小的索引,然后我们选择剩下的最大的k指数。

另外,这里值得一提的是argpartition,我们没有按排序顺序获取索引。如果需要排序顺序,我们需要输入范围数组np.argpartition,正如本文中提到的post.

样本运行 -

1) 2D 情况:

In [42]: a    # 2D array
Out[42]: 
array([[38, 14, 81, 50],
       [17, 65, 60, 24],
       [64, 73, 25, 95]])

In [43]: k_largest_index_argsort(a, k=2)
Out[43]: 
array([[2, 3],
       [0, 2]])

In [44]: k_largest_index_argsort(a, k=4)
Out[44]: 
array([[2, 3],
       [0, 2],
       [2, 1],
       [1, 1]])

In [66]: k_largest_index_argpartition_v1(a, k=4)
Out[66]: 
array([[2, 1], # Notice the order is different
       [2, 3],
       [0, 2],
       [1, 1]])

2)3D案例:

In [46]: a # 3D array
Out[46]: 
array([[[20, 98, 27, 73],
        [33, 78, 48, 59],
        [28, 91, 64, 70]],

       [[47, 34, 51, 19],
        [73, 38, 63, 94],
        [95, 25, 93, 64]]])

In [47]: k_largest_index_argsort(a, k=2)
Out[47]: 
array([[0, 0, 1],
       [1, 2, 0]])

运行时测试 -

In [56]: a = np.random.randint(0,99999999999999,(3000,4000))

In [57]: %timeit k_largest_index_argsort(a, k=10)
1 loops, best of 3: 2.18 s per loop

In [58]: %timeit k_largest_index_argpartition_v1(a, k=10)
10 loops, best of 3: 178 ms per loop

In [59]: %timeit k_largest_index_argpartition_v2(a, k=10)
10 loops, best of 3: 128 ms per loop
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 numpy 多维数组中获取 k 个最大值的索引 的相关文章

  • 将 saxon 与 python 结合使用

    我需要使用 python 处理 XSLT 目前我正在使用仅支持 XSLT 1 的 lxml 现在我需要处理 XSLT 2 有没有办法将 saxon XSLT 处理器与 python 一起使用 有两种可能的方法 设置一个 HTTP 服务 接受
  • 使 django 服务器可以在 LAN 中访问

    我已经安装了Django服务器 可以如下访问 http localhost 8000 get sms http 127 0 0 1 8000 get sms 假设我的IP是x x x x 当我这样做时 从同一网络下的另一台电脑 my ip
  • Django:按钮链接

    我是一名 Django 新手用户 尝试创建一个按钮 单击该按钮会链接到我网站中的另一个页面 我尝试了一些不同的例子 但似乎没有一个对我有用 举个例子 为什么这不起作用
  • 使用 matplotlib 绘制时间序列数据并仅在年初显示年份

    rcParams date autoformatter month b n Y 我正在使用 matpltolib 来绘制时间序列 如果我按上述方式设置 rcParams 则生成的图会在每个刻度处标记月份名称和年份 我怎样才能将其设置为仅在每
  • Python - StatsModels、OLS 置信区间

    在 Statsmodels 中 我可以使用以下方法拟合我的模型 import statsmodels api as sm X np array 22000 13400 47600 7400 12000 32000 28000 31000 6
  • 如何使用Conda下载python包并随后离线安装?

    我知道通过 pip 我可以使用以下命令下载 Python 包 但 pip install 破坏了我的内部包依赖关系 当我做 pip download
  • 从字符串中删除识别的日期

    作为输入 我有几个包含不同格式日期的字符串 例如 彼得在16 45 我的生日是1990年7月8日 On 7 月 11 日星期六我会回家 I use dateutil parser parse识别字符串中的日期 在下一步中 我想从字符串中删除
  • 使用 on_bad_lines 将 pandas.read_csv 中的无效行写入文件

    我有一个 CSV 文件 我正在使用 Python 来解析该文件 我发现文件中的某些行具有不同的列数 001 Snow Jon 19801201 002 Crom Jake 19920103 003 Wise Frank 19880303 l
  • 根据列值突出显示数据框中的行?

    假设我有这样的数据框 col1 col2 col3 col4 0 A A 1 pass 2 1 A A 2 pass 4 2 A A 1 fail 4 3 A A 1 fail 5 4 A A 1 pass 3 5 A A 2 fail 2
  • Spark KMeans 无法处理大数据吗?

    KMeans 有几个参数training http spark apache org docs latest api python pyspark mllib html highlight kmeans pyspark mllib clus
  • 以编程方式停止Python脚本的执行? [复制]

    这个问题在这里已经有答案了 是否可以使用命令在任意行停止执行 python 脚本 Like some code quit quit at this point some more code that s not executed sys e
  • OpenCV 无法从 MacBook Pro iSight 捕获

    几天后 我无法再从 opencv 应用程序内部打开我的 iSight 相机 cap cv2 VideoCapture 0 返回 并且cap isOpened 回报true 然而 cap grab 刚刚返回false 有任何想法吗 示例代码
  • 在Python中获取文件描述符的位置

    比如说 我有一个原始数字文件描述符 我需要根据它获取文件中的当前位置 import os psutil some code that works with file lp lib open path to file p psutil Pro
  • 使用 \r 并打印一些文本后如何清除控制台中的一行?

    对于我当前的项目 有一些代码很慢并且我无法使其更快 为了获得一些关于已完成 必须完成多少的反馈 我创建了一个进度片段 您可以在下面看到 当你看到最后一行时 sys stdout write r100 80 n I use 80覆盖最终剩余的
  • Jupyter Notebook 内核一直很忙

    我已经安装了 anaconda 并且 python 在 Spyder IPython 等中工作正常 但是我无法运行 python 笔记本 内核被创建 它也连接 但它始终显示黑圈忙碌符号 防火墙或防病毒软件没有问题 我尝试过禁用两者 我也无法
  • Fabric env.roledefs 未按预期运行

    On the 面料网站 http docs fabfile org en 1 10 usage execution html 给出这个例子 from fabric api import env env roledefs web hosts
  • 对年龄列进行分组/分类

    我有一个数据框说df有一个柱子 Ages gt gt gt df Age 0 22 1 38 2 26 3 35 4 35 5 1 6 54 我想对这个年龄段进行分组并创建一个像这样的新专栏 If age gt 0 age lt 2 the
  • Python:如何将列表列表的元素转换为无向图?

    我有一个程序 可以检索 PubMed 出版物列表 并希望构建一个共同作者图 这意味着对于每篇文章 我想将每个作者 如果尚未存在 添加为顶点 并添加无向边 或增加每个合著者之间的权重 我设法编写了第一个程序 该程序检索每个出版物的作者列表 并
  • Python 类继承 - 诡异的动作

    我观察到类继承有一个奇怪的效果 对于我正在处理的项目 我正在创建一个类来充当另一个模块的类的包装器 我正在使用第 3 方 aeidon 模块 用于操作字幕文件 但问题可能不太具体 以下是您通常如何使用该模块 project aeidon P
  • 导入错误:没有名为 site 的模块 - mac

    我已经有这个问题几个月了 每次我想获取一个新的 python 包并使用它时 我都会在终端中收到此错误 ImportError No module named site 我不知道为什么会出现这个错误 实际上 我无法使用任何新软件包 因为每次我

随机推荐

  • 如何在 Visual Studio 2008 中创建 COM DLL?

    我已经很久没有编写 COM dll 了 我现在已经创建了几个类 它们继承了一些 COM 接口 但我想对其进行测试 我知道我必须在某处放置一个 GUID 然后使用 regsvr32 注册它 但是涉及哪些步骤 编辑 抱歉 忘了提及我正在使用 C
  • 如何将图像插入 OpenXML Word 文档的页眉?

    我的 OpenXML Word 文档生成项目需要文本 表格和图像 但首先 我需要一个带有徽标 图像 的文档标题 我使用了 Microsoft 示例来创建页眉和页脚 网址为使用 Open XML SDK 2 0 for Microsoft O
  • 为什么在某些条件下 AppDomain.CurrentDomain.GetAssemblies() 不返回 Global.asax 中的依赖程序集?

    EDIT 以前的标题是 IIS 重新启动和应用程序初始化之间的应用程序初始化行为不同 我更改了标题以将问题从 IIS 应用程序初始化中扩展出来 因为观察到的行为与AppDomain CurrentDomain GetAssemblies 我
  • 使用自定义 UITableViewCell 自动布局

    如何使用自动布局来移动自定义 UITableViewCell 的内容并调整其大小 为了使问题更清楚 我分配了contentView我的自定义单元格具有浅灰色背景颜色 为了将这个问题尽可能减少到最小 我的自定义单元只有一个UIImageVie
  • OpenCV中SimpleBlobDetector的minRepeatability参数有什么用?

    有一个minRepeatability参数输入SimpleBlobDetector在 OpenCV 中 这个参数有什么用 如果我将其从 1 更改为 20 它将如何影响斑点检测 相关代码在斑点检测 c The detect函数 唯一一个使用m
  • Hibernate:MySQLDialect 和 MySQLInnoDBDialect 之间有什么区别?

    MySQLDialect 和 MySQLInnoDBDialect 有什么区别 从那时起我就使用了 MySQLDialect 现在我想知道上面的有什么不同 Anyone MySQL默认的存储引擎是MyISAM 如果您需要事务和行级锁定 您通
  • React Router v4默认页面(未找到页面)

    这是常见的目的 将不匹配的请求定向到未找到的页面 用react router v4做这个看起来像以前的版本 我期望这个 下面是示例作品 链接工作正常 但我希望 NotFound 组件仅调用未知的 url 请求 但它总是在那里 import
  • Android下载管理器完成

    关于安卓下载管理器的小问题 这是我第一次使用它 并成功下载了多个文件并打开它们 但我的问题是如何检查下载是否完成 情况是我下载了一个 PDF 文件并打开它 通常该文件很小 在打开之前就完成了 但是 如果文件较大 如何在打开文件之前检查下载管
  • IndexedDB 事务和 Promise 之间的相互作用不一致

    I saw 同步承诺发布在 Reddit 和与作者进行了讨论 我们注意到 IndexedDB 事务和 Promise 之间的关系存在一些奇怪的不一致 IndexedDB 事务在所有情况下自动提交onsuccess活动结束 一个复杂的问题是你
  • Java 程序可以检测到它的堆空间不足吗?

    整个周末我都会在室友的电脑上运行遗传算法 我担心这么长时间运行它可能会耗尽内存 然而 我的算法的工作方式使得可以相当容易地修剪不太有用的结果 因此 如果有一种方法可以告诉我的程序何时将耗尽堆空间 我可能可以腾出空间并继续进行再多一些时间 当
  • Postgresql存储过程返回select结果集

    在 Microsoft SQL Server 中我可以做这样的事情 create procedure my procedure argument1 int argument2 int as select from my table wher
  • 错误 ITMS-90168:“您上传的二进制文件无效。”

    错误 ITMS 90168 您上传的二进制文件无效 生成的 API 分析文件太大 我们无法验证 交付前您的 API 每次我想将新版本的应用程序上传到 iTunes connect 时 都会出现上述错误 我正在使用应用程序加载器进行上传 我的
  • 监视目录列表的更改?

    在 unix 系统上 我如何监视 例如 tail 的工作原理 目录中对文件所做的更改 创建新文件或大小更改等 寻找命令行工具而不是要安装的东西 大多数 UNIX 变体都有一个 API 但它没有标准化 在Linux上 有inotify 在命令
  • ES6 尾递归优化堆栈溢出

    读过Rauschmayer 博士的描述关于 es6 中的递归尾部调用优化 我一直在尝试重新创建他详细介绍的递归阶乘函数的 零堆栈 执行 使用 Chrome 调试器在堆栈帧之间步进 我发现尾部优化没有发生 并且正在为每个递归创建一个堆栈帧 我
  • 为数组 x 中的每个元素选择 n 个项目(从泊松分布中抽取)的快速方法

    我在解决遇到的问题时遇到了一些麻烦 我有一个包含价格的数组 gt gt gt x np random randint 10 size 10 array 6 1 7 6 9 0 8 2 1 8 以及 随机 生成的泊松分布到达数组 gt gt
  • Keras ValueError:尺寸必须相等问题

    即使应用了答案和评论中的建议后 尺寸不匹配问题似乎仍然存在 这也是要复制的确切代码和数据文件 https drive google com drive folders 1q67s0VhB O7J8OtIhU2jmj7Kc4LxL3sf us
  • 在 Ruby 中动态创建类

    我有一个类应该看起来像这样 class Family Type1 people Array new 3 people 0 Policeman new Peter 0 people 1 Accountant new Paul 0 people
  • Android 意图过滤器不起作用

    我的应用程序可以打开以下文件格式 kml 应用程序 vnd google earth kml xml kmz 应用程序 vnd google earth kmz gpx 应用程序 gpx xml 我正在尝试正确设置我的意图过滤器 以便在尝试
  • Path.Combine() 行为与驱动器号

    根据官方文档有关Path Combine方法 https msdn microsoft com en us library fyy7a5kt v vs 110 aspx Remarks 如果 path1 不是驱动器引用 即 C 或 D 并且
  • 如何从 numpy 多维数组中获取 k 个最大值的索引

    我问了几个问题StackOverflow但找不到相关答案 我想从 a 中获取 k 个最大值的索引numpy ndarray 这个链接讨论相同但针对一维数组 np argsort对于二维数组导致元素按行排序 IE Note array ele