比较两个 numpy 数组的最快方法

2024-05-21

我有两个数组:

>>> import numpy as np
>>> a=np.array([2, 1, 3, 3, 3])
>>> b=np.array([1, 2, 3, 3, 3])

无论顺序如何,比较这两个数组的元素是否相等的最快方法是什么?

EDIT我测量了以下函数的执行时间:

def compare1():        #works only for arrays without redundant elements
    a=np.array([1,2,3,5,4])
    b=np.array([2,1,3,4,5])
    temp=0
    for i in a:
        temp+=len(np.where(b==i)[0])
    if temp==5:
            val=True
    else:
            val=False
    return 0

def compare2():
    a=np.array([1,2,3,3,3])
    b=np.array([2,1,3,3,3])
    val=np.all(np.sort(a)==np.sort(b))
    return 0

def compare3():                        #thx to ODiogoSilva
    a=np.array([1,2,3,3,3])
    b=np.array([2,1,3,3,3])
    val=set(a)==set(b)
    return 0

import numpy.lib.arraysetops as aso
def compare4():                        #thx to tom10
    a=np.array([1,2,3,3,3])
    b=np.array([2,1,3,3,3])
    val=len(aso.setdiff1d(a,b))==0
    return 0

结果是:

>>> import timeit
>>> timeit.timeit(compare1,number=1000)
0.0166780948638916
>>> timeit.timeit(compare2,number=1000)
0.016178131103515625
>>> timeit.timeit(compare3,number=1000)
0.008063077926635742
>>> timeit.timeit(compare4,number=1000)
0.03257489204406738

看起来 OdiogoSilva 的“set”方法是最快的。

你知道我也可以测试的其他方法吗?

EDIT2正如 user2357112 的评论中所解释的,上面的运行时间并不是比较数组的正确度量。

#test.py
import numpy as np
import numpy.lib.arraysetops as aso

#without duplicates
N=10000
a=np.arange(N,0,step=-2)
b=np.arange(N,0,step=-2)

def compare1():
    temp=0
    for i in a:
        temp+=len(np.where(b==i)[0])
    if temp==len(a):
        val=True
    else:
        val=False
    return val
def compare2():
    val=np.all(np.sort(a)==np.sort(b))
    return val
def compare3():
    val=set(a)==set(b)
    return val
def compare4():
    val=len(aso.setdiff1d(a,b))==0
    return val

输出是:

>>> from test import *
>>> import timeit
>>> timeit.timeit(compare1,number=1000)
101.16708397865295
>>> timeit.timeit(compare2,number=1000)
0.09285593032836914
>>> timeit.timeit(compare3,number=1000)
1.425955057144165
>>> timeit.timeit(compare4,number=1000)
0.44780397415161133

现在compare2是最快的。还有一种方法可以胜过这个吗?


Numpy 作为集合运算的集合。

import numpy as np
import numpy.lib.arraysetops as aso

a=np.array([2, 1, 3, 3, 3])
b=np.array([1, 2, 3, 3, 3])

print aso.setdiff1d(a, b)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

比较两个 numpy 数组的最快方法 的相关文章

随机推荐

  • 如何将 NTLM 身份验证与 Perl 的 SOAP::Lite 模块集成?

    此 Perl 代码适用于对 ASP NET Web 服务的匿名访问 但当打开集成安全性时 该服务会返回 401 错误 我认为我需要将 NTLM 模块与 SOAP Lite 结合使用 但尚不清楚如何做到这一点 如何集成这些组件 use SOA
  • 类型“typeof Control”上不存在属性“Draw”

    我正在尝试使用传单和其他传单插件实现地图组件 问题是其他插件由于某种原因无法在 TypeScript 上运行 例如 我无法使用 leaflet draw 插件编译代码并收到错误 类型 typeof Control 上不存在属性 Draw 地
  • 在python中设置区域设置编码

    我通过以下方式从 python 代码调用 java 程序 subprocess check output java classpath Users feralvam Programas semanticvectors 3 4 semanti
  • 使用 Delphi 读取 Excel 电子表格

    我需要使用 Delphi 2010 读取和写入 Excel 电子表格 没什么花哨的 只需读取和写入不同工作表上特定单元格和范围的值 需要在没有安装 Excel 的情况下工作并支持 Excel 2007 我看过的一些东西 我尝试过使用ADO
  • MySQL 中的创建/写入权限

    我的设备遇到一些权限问题SELECT INTO OUTFILE陈述 当我登录数据库并执行简单的导出命令时 例如 mysql gt select from XYZ into outfile home mropa Photos Desktop
  • node.js 安装向导提前结束

    我无法安装 node js 0 8 9 我是通过安装向导完成的 每次安装结束时我都会收到消息 Node js 安装向导提前结束 会是什么呢 谢谢 这可能会对将来的某人有所帮助 我从安装程序中收到类似的消息 发现我可以转到命令提示符并使用命令
  • 使用 pcl::VoxelGrid 进行 PCL 下采样

    下面的函数不会产生任何结果 也就是说 点云中的点数与降采样前完全相同 我尝试了从 0 01 一直到下面看到的叶子大小的各种数字 但所有这些数字都产生相同的结果 我必须记录来自的转化 如下所示 pcl PointCloud
  • 当 TCP 序列号到达而不是预期时会发生什么情况?

    我正在编写一个程序 使用 libpcap 捕获数据包并重新组装 TCP 流 我的程序只是监视流量 因此我无法控制数据包的接收和发送 我的程序忽略所有非 TCP IP 流量 我根据 ISN 计算下一个预期序列号 然后计算连续的 SEQ 号 我
  • 写入 JSON 会产生 TypeError: dump() 需要至少 2 个参数(给定 1 个)

    我正在尝试加载 json 文件 更新它并写回来 这是我的尝试 但出现错误 类型错误 dump 至少需要 2 个参数 给定 1 个 with open employees json as data file employees json lo
  • 是否有 java.lang.String 的内存高效替代品?

    看完之后这篇旧文章 http www javaworld com javaworld javatips jw javatip130 html page 2测量几种对象类型的内存消耗 我惊讶地发现有多少内存String在Java中的使用 le
  • 如何在 PHP 中将默认日期设置为波斯日期?

    如何在 PHP 中将默认日期设置为波斯日期 说吧 如果我echo这个功能date Y m d 然后它会显示2018 03 05但我想要1396 12 14波斯日期 请检查 http php net manual en intldatefor
  • Google 地图 v3 自定义标记图标无法保持其在地图上的位置

    使用 Google 地图 v3 进行开发 由于某种原因 我的自定义标记图标 更改 了它在放大时的位置 看起来它有某种 填充 属性 不会随着缩放而改变 这意味着它在最大缩放 18 上的位置是正确的 但是如果我更改缩放值 它会 移动 一点到顶部
  • iOS崩溃核心位置CFBasicHashCreateCopy?

    我已经通过 Crashlytics 报告了这个问题 尽管我无法在本地复制它 所以除了下面的堆栈跟踪之外我没有什么可做的 不确定堆栈跟踪中是否引用了 CoreLocation与它有任何关系 但我不确定可能是什么原因 我的项目使用的是ARC 有
  • 使用 Unity 在 iOS 应用程序上发送电子邮件时出错

    我正在开展一个学校项目 我正在尝试记录从我统一制作的游戏中存储的数据 我的问题是我想通过电子邮件将数据发送到应用程序 一切正常 电子邮件与数据一起发送等 但是当我将应用程序构建到 iOS 设备时 它不会发送电子邮件 我在 Unity 中没有
  • Swift - 预期 '{' 启动 setter 定义

    我正在关注高级 swift WWDC 2014 视频 使用类上的下标来委托给类属性 但使用与视频中相同的语法时出现错误 enum Direction case North South East West class Place Thing
  • 通过 C# 与 azure 门户查询资源管理器查询时,Int 值不同

    我发现通过 C API 查询与使用 Azure 门户中的查询资源管理器进行查询之间 Int64 字段的值发生了不同的变化 Document id 15072358 f9eb 4e92 bde1 18e038484042 messageId
  • 仅选择 Varchar 列中的数字[重复]

    这个问题在这里已经有答案了 在 SQL Server 2008 R2 中 我在 varchar 12 列中有一些数据 它看起来像这样 Data 1234 1765 34566 123 SDRMH HJG434 我想从所有包含 的行中删除 并
  • 错误:执行 gem 时... (Gem::FilePermissionError)

    我检查了所有其他类似的答案 没有一个与我的完全一样 这些解决方案也不适合我 gem environment and sudo gem environment给出相同的结果 RubyGems Environment RUBYGEMS VERS
  • OnImageSavedCallback 返回的 OutputFileResults 具有无效的 Uri

    我正在使用 CameraX API 在我的 Android 应用程序中拍照 保存它们 然后从路径中显示它们 与之前的版本alpha 09我能够这样做onImageSaved File file 然而随着alpha 10我必须使用onImag
  • 比较两个 numpy 数组的最快方法

    我有两个数组 gt gt gt import numpy as np gt gt gt a np array 2 1 3 3 3 gt gt gt b np array 1 2 3 3 3 无论顺序如何 比较这两个数组的元素是否相等的最快方