A==0 真的比 ~A 更好吗?

2024-01-11

问题设置简介

我正在做一些基准测试,涉及 -~A and A==0for a double array with no NaNs,两者都转换为A到一个逻辑数组,其中所有zeros被转换为true值和其余设置为false价值观。

对于基准测试,我使用了三组输入数据 -

  • 非常小的数据 -15:5:100
  • 中小型数据 -50:40:1000
  • 中型到大型数据 -200:400:3800

输入是用创建的A = round(rand(N)*20),其中 N 是从大小数组中获取的参数。因此,N会有所不同15 to 100 with stepsize of 5对于第一组,第二组和第三组类似。请注意,我将 datasize 定义为 N,因此元素的数量将为 datasize^2 或 N^2。

基准测试代码

N_arr = 15:5:100; %// for very small to small sized input array
N_arr = 50:40:1000; %// for small to medium sized input array
N_arr = 200:400:3800; %// for medium to large sized input array
timeall = zeros(2,numel(N_arr));
for k1 = 1:numel(N_arr)
    A = round(rand(N_arr(k1))*20);

    f = @() ~A;
    timeall(1,k1) = timeit(f);
    clear f

    f = @() A==0;
    timeall(2,k1) = timeit(f);
    clear f
end

Results

最后是问题

人们可以看到如何A==0表现优于~A跨所有数据大小。因此,这里有一些观察结果和相关问题 -

  1. A==0有一个关系运算符和一个操作数,而~A只有一个关系运算符。两者都生成逻辑数组并且都接受双精度数组。实际上,A==0将与NaNs也是,而~A惯于。那么,为什么还是~A至少不如A==0因为它看起来像A==0是做了更多的工作还是我在这里遗漏了一些东西?

  2. 经过的时间有一个奇怪的下降A==0从而提高了性能N = 320, 我吃102400我在我可以访问的两个不同系统上多次运行该大小时观察到了这一点。那么那里发生了什么?


这并不是严格意义上的答案,而是我对讨论的贡献

我用的是profiler调查代码的稍微修改版本:

N_arr = 200:400:3800; %// for medium to large sized input array

for k1 = 1:numel(N_arr)

    A = randi(1,N_arr(k1));
    [~]=eq(A,0);
    clear A

    A = randi(1,N_arr(k1));
    [~]=not(A);
    clear A   

end

我使用了以下探查器标志(根据未记录的 Matlab 系列帖子Profiler http://undocumentedmatlab.com/blog/undocumented-profiler-options):

profile('-memory','on');
profile('on','-detail','builtin');

And here's an excerpt from the profiler results (link to the larger image https://i.stack.imgur.com/Wbufb.png): Profiler output

看来==变体分配了一点点额外的内存,使其能够发挥其魔力......

关于你的问题2:在删除保留之前timeall,我尝试绘制与您在 Excel 中所做的相同的图表。我没有观察到你提到的行为N = 320。我怀疑这可能与您在代码中使用的附加包装器(即函数句柄)有关。


我想我应该附上所讨论功能的可用文档以供快速参考。

的文档~(\MATLAB\R20???\toolbox\matlab\ops\not.m):

%~   Logical NOT.
%   ~A performs a logical NOT of input array A, and returns an array
%   containing elements set to either logical 1 (TRUE) or logical 0 (FALSE).
%   An element of the output array is set to 1 if A contains a zero value
%   element at that same array location.  Otherwise, that element is set to
%   0.
%
%   B = NOT(A) is called for the syntax '~A' when A is an object.
%
%   ~ can also be used to ignore input arguments in a function definition,
%   and output arguments in a function call.  See "help punct"

%   Copyright 1984-2005 The MathWorks, Inc.

的文档==(\MATLAB\R20???\toolbox\matlab\ops\eq.m):

%==  Equal.
%   A == B does element by element comparisons between A and B
%   and returns a matrix of the same size with elements set to logical 1
%   where the relation is true and elements set to logical 0 where it is
%   not.  A and B must have the same dimensions unless one is a
%   scalar. A scalar can be compared with any size array.
%
%   C = EQ(A,B) is called for the syntax 'A == B' when A or B is an
%   object.

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

A==0 真的比 ~A 更好吗? 的相关文章

  • 要做或不做:将图像存储在数据库中[重复]

    这个问题在这里已经有答案了 在 Web 应用程序的上下文中 我的前老板总是说在数据库中放置对图像的引用 而不是图像本身 我倾向于同意在数据库中存储 url 与图像本身是一个好主意 但在我现在工作的地方 我们在数据库中存储大量图像 我能想到的
  • 优先连接,Matlab 中的复杂网络

    大家好 我现在正在 MATLAB 中研究优先附件模型 在理解以下内容时遇到一些困难 假设我一开始有 4 个节点 连接如下 time 0 1 lt gt 2 3 lt gt 4 在下一个时间步骤中 我添加一个节点和 4 个连接 然后添加另一个
  • Rust 数组是否有与 JavaScript 的 indexOf 等效的东西?

    var fruits Banana Orange Apple Mango var index fruits indexOf Apple let fruits Banana Orange Apple Mango let index fruit
  • 如果 jQuery 脚本是在所有页面 HTML 之后加载的,那么它们还需要 $(document).ready 吗?

    如果我在所有页面 HTML 下方加载 jQuery 脚本 我是否还需要等待 document ready能够使用jQuery来查找页面中的元素 否 因为文档已经加载 Dom 从上到下加载 我个人喜欢把所有的js放在页面底部而不是放在头部 然
  • 具有独特矩阵转置问题的 2D 分块

    我有类型的复杂值数据struct complex double real 0 0 double imag 0 0 以 3 阶张量的形式组织 底层容器具有与内存页边界对齐的连续内存布局 The natural slicing directio
  • 计算元组中与模式匹配的元素

    我有一个矩阵m我想计算零的数量 m 2 0 2 2 4 4 5 4 0 9 4 8 2 2 0 0 我当前的代码如下 def zeroCount M return item for row in M for item in row coun
  • Python/curve_fit:无法通过初始化猜测传递数组

    我有这个函数来计算某种多项式 def pipoly df pj n np size pj p pj 0 for j in range 1 n p pj j df j return p pj应该是一个包含多项式系数的初始猜测的数组 因此 多项
  • 将相同的多个对象推送到多个数组中

    这是后续使3个数组相互对应 第一个是对象名称 https stackoverflow com questions 57564488 make 3 arrays correspond to each other with the first
  • MATLAB parfor 和 C++ 类 mex 包装器(需要复制构造函数?)

    我正在尝试使用概述的方法将 C 类包装在 matlab mex 包装器中here http www mathworks com matlabcentral newsreader view thread 278243 基本上 我有一个初始化
  • 考虑预分配速度[重复]

    这个问题在这里已经有答案了 我正在做以下事情 for i 1 m index 0 for j 1 n index index values i j 2 j 1 if j 1 symbol chip chip values index 1 e
  • 绘制布朗运动 matlab

    首先 我只想说我不太习惯使用matlab 但我需要一个作业 我应该创建一个 布朗运动 我的代码目前如下所示 clf hold on prompt Ge ett input size input prompt numParticles inp
  • 氡变换线检测

    我正在尝试检测灰度图像中的线条 为此 我在 MATLAB 中使用 Radon 变换 我的 m 文件的示例如下所示 我可以使用此代码检测多行 我还使用线条的移位和旋转属性来绘制线条 但是 我不明白在获取rho和theta值后如何获取检测线的起
  • 在 unix 中编译 dhrystone 时出错

    我是使用基准测试和 makefile 的新手 我已经从下面的链接下载了 Dhrystone 基准测试 我正在尝试编译它 但我遇到了奇怪的错误 我尝试解决它 但没有成功 有人可以帮助我运行 dhrystone 基准测试吗 以下是我尝试编译的两
  • 使用不同的背景颜色保存 MATLAB 图窗

    我想打印一个带有深色背景和白色标签的 MATLAB 图 如果我使用print or saveas命令我不知何故失去了颜色 绘图符号再次变暗 背景变为白色 points rand 100 3 plot3 points 1 points 2 p
  • Linux 上的基准测试程序

    对于一项任务 我们需要使用不同的优化和参数来对我们的实现进行基准测试 有没有一种可行的方法可以在Linux命令行 我知道时间 上使用不同的参数对小程序进行基准测试 从而为我提供CSV或类似内容的时间数据 输出可能类似于 Implementa
  • 为什么反射会减慢Android手机的速度

    我多次读到反射会降低手机性能 这有多真实 例如 在我的例子中 我从 Web 服务获取一些参数 这些参数与我在 Android 应用程序中的类的参数同名 所以我只是使用java字段和反射设置这些参数的值 它似乎并没有降低性能 有人可以向我解释
  • LEFT JOIN 比 INNER JOIN 快得多

    我有一张桌子 MainTable 有超过 600 000 条记录 它通过第二个表连接到自身 JoinTable 在父 子类型关系中 SELECT Child ID Parent ID FROM MainTable AS Child JOIN
  • 在 C 语言中,为什么数组的地址等于它的值?

    在下面的代码中 指针值和指针地址与预期不同 但数组值和地址则不然 怎么会这样 Output my array 0022FF00 my array 0022FF00 pointer to array 0022FF00 pointer to a
  • strlen() 编译时优化

    前几天我发现你可以找到编译时strlen使用这样的东西 template
  • PHP-如何根据条件配对数组中的项目

    如何将数组中的项目配对 假设我有一个数组Fighters 我想根据他们的情况将他们配对Weights 体重最接近的拳手应作为配对最佳匹配 但如果他们是在同一个团队中 他们不应该配对 团队 1 战斗机A体重为60 战斗机B体重为65 2队 战

随机推荐

  • 了解 _.js 中下划线的声明吗?

    这是从一开始带注释的 js 来源 http documentcloud github io underscore docs underscore html 尽管我可以尝试 但我的 JavaScript 能力还不够高 无法理解这里发生的事情
  • Google Pubsub:不可用:该服务无法满足您的请求

    我正在使用 java 库从我的代码中订阅订阅 使用sbt com google cloud google cloud pubsub 0 24 0 beta 我按照本指南编写订阅者 https cloud google com pubsub
  • 是否可以集成 django-taggit 和 django-mptt / django-treebeard?

    我正在开发一个需要标记不同类型内容的网站 这有利于使用 django taggit 但是 如果标签以其自然层次结构在数据库中表示 这将非常有益 有利于使用 django mptt 或 django treebeard 将 taggit 的通
  • 将 UIToolbar 添加到某些文本字段的输入附件视图

    在我寻找我的第一个 iPhone 应用程序时 我发布了有关处理 iOS 键盘上的返回键的正确方法 现在我需要找出键盘上方的工具栏 其中包含上一个 下一个和完成按钮 我一直在使用以下网站的示例 输入配件视图 http gabriel tips
  • Flutter 从 Firebase 存储加载图像

    我看到有很多关于如何使用 flutter 将图像上传到 firebase 存储的示例 但没有实际下载 读取 显示已上传的图像 在Android中 我只是使用Glide要显示图像 我该如何在 Flutter 中执行此操作 我是否使用Netwo
  • 使用 Pandas 将 csv 转换为 Json

    我想使用 pandas 将 CSV 转换为 JSON 格式 我是一名测试人员 想要将一些事件发送到事件中心 因为我想要维护 CSV 文件并使用 CSV 文件更新我的记录 数据 我通过使用 pandas 读取 JSON 创建了一个 CSV 文
  • 将 Dropzone 中的文件添加到表单

    我想使用 Dropzone js 以便用户可以选择他想要上传的图像 但我不希望它们即时上传 而只是添加到表单中 然后以表单数组中的正常方式提交 我怎样才能做到这一点 我见过这样的问题如何让 Dropzone js 仅在单击提交按钮时上传文件
  • 在 SQLite 数据库中保存 ArrayList

    所以我想保存一组有序的双精度值 并且我希望能够轻松地插入 检索或删除其中的任何值 因此 我使用 ArrayList 在其中定义一个名为 Doubles 的类来存储双精度值 如何将此数组列表存储在 SQLite 数据库的记录中 我的意思是 列
  • 如何确定 Windows Java 安装位置

    我正在尝试从 C 程序集动态运行 jar 使用Process Start info 现在 我可以从控制台应用程序运行 ProcessStartInfo info new ProcessStartInfo java jar somerando
  • Debian Jessie 中的 Apache - 仍然收到消息您没有权限访问此服务器上的 /

    相同的虚拟配置我 apache wheezy 工作正常 例如 服务器名称 lgbs 服务器别名 www lgbs DocumentRoot home vdomain app web SetEnv APPLICATION ENV develo
  • Requests.get 显示的 HTML 与 Chrome 开发者工具不同

    我正在使用Python 特别是jupyter笔记本 开发一个网络抓取工具 它可以抓取一些房地产页面并保存价格 地址等数据 它对于我挑选的其中一个页面工作得很好 但是当我尝试抓取此页面时 sreality cz https www sreal
  • 按数字和字母顺序对带有字母的数字进行排序

    我的网站上有一个数据库 其中有一长串 产品 全部包含字母 例如 TC 345 TC 234 或 HC 236W 123 234 PWD 我们可以按数字和字母顺序对网站上的 进行排序吗 目前我们按字母顺序存储 因此顺序为 10 PDW 100
  • 正则表达式删除句子中包含数字的所有单词

    我尽力删除了句子中所有带有数字的单词 但仍然不成功 我什至尝试了以下正则表达式 regex s w 1 2 W s a zA Z0 9 d x preg replace regex x 我正在努力完成以下任务 包含数字和任何特殊字符 例如
  • Android、Windows Phone 7 和 Blackberry 的等效配置文件 (iOS)

    在 iOS 中 可以使用配置文件通过无线方式推送电子邮件 wifi 和 VPN 等的配置 有适用于 Android Windows Phone 7 和 Blackberry 的同等产品吗 链接到 iOS 的配置文件http develope
  • PhoneGap 与 jQuery Mobile 性能问题的常见来源有哪些?

    我有一个使用 PhoneGap 1 0 和 jQuery Mobile 1 0b2 编写的应用程序 在 iPhone 和 iPad 上运行 自从我开始使用该框架以来 我一直受到应用程序中 页面 之间切换的性能问题的困扰 按下按钮后 在转换发
  • 如何处理一个类中的多个线程?

    线程通常以两种方式设计 请参阅java教程 http java sun com docs books tutorial essential concurrency runthread html 通过扩展 Thread 类或通过实现 Runn
  • 如何检测滚动条在浏览器的哪一侧 - 向右还是向左(在 RTL 的情况下)?

    For 某些浏览器 Safari Edge IE 会自动将滚动条移动到左侧 这是正确的行为 不幸的是 主要浏览器 Chrome 和 Firefox 的行为方式有所不同 滚动条仍然位于浏览器的右侧 是否可以以编程方式 最好使用 vanilla
  • 以编程方式在代码隐藏中添加视觉状态设置器

    我正在将 8 1 Universal 转换为 UWP 我在代码隐藏中有一些代码 可以根据视图模型数据以编程方式在堆栈面板中创建潜在的数百个节点 我正在尝试向其中一些节点添加一些视觉响应规则 我使用的模式基本上是 foreach var it
  • R:对每行内的内容进行四舍五入,使行总计等于我指定的数字

    我有 170 行带小数的数字 需要四舍五入为整数 但是 行总数必须等于我指定的数字 作为一个非常基本的说明 假设我有一个矩阵 1x4 其单元格内容为 1 2 3 4 7 7 5 3 但假设这些数字代表个体 因此我需要将它们四舍五入为整数 这
  • A==0 真的比 ~A 更好吗?

    问题设置简介 我正在做一些基准测试 涉及 A and A 0for a double array with no NaNs 两者都转换为A到一个逻辑数组 其中所有zeros被转换为true值和其余设置为false价值观 对于基准测试 我使用