matlab - BSXFUN 关于关系操作的内存效率

标签 matlab memory memory-management vectorization bsxfun

这里主要想研究两点-

  • bsxfun 有六个内置关系运算:@eq (equal)@ne(不等于)@lt(小于) @le(小于或等于)@gt(大于)@ ge(大于或等于)。很多时候我们将它们用于 float 和关系运算,它们输出逻辑数组。所以,这让我很好奇,如果在 float 上使用这些关系运算时,bsxfun 的固有扩展是否涉及输入元素的实际复制,而这恰恰是我的第一个问题。

  • 我还想知道这个内存效率问题如何转化为 anonymous functions当与 bsxfun 一起使用时,再次与关系操作一起使用。

这受到为 Comparing BSXFUN and REPMAT 执行的runtime/speedup 测试的启发。 .

最佳答案

简介和测试设置

要执行内存测试以查询问题中提出的要点,让我们定义输入 A B :

A = rand(M,N)
B = rand(1,N)

在这里, M N 是大小参数,并保持为非常大的数字。

我会使用 repmat 进行比较,因为这似乎是 bsxfun 最接近的替代方案。所以,这里的想法是运行 bsxfun repmat 等效代码并注意任务管理器(在 Windows 上)内存使用量的波动。

This solution that compared bsxfun and repmat for runtime efficiency得出的结论是,将关系操作与 bsxfun 结合使用 的运行效率非常高,因此扩展 memory efficiency 的基础会很有趣 进行比较。

因此, bsxfun repmat 等价物看起来像这样 -

REPMAT version:  A == repmat(B,size(A,1),1)
BSXFUN version: bsxfun(@eq,A,B))

结果

关于运行 repmat 然后是 bsxfun 代码,Windows 任务管理器显示类似这样的内容,第一个 bump 表示 repmat 的运行 下一个是给 bsxfun一个-

enter image description here

repmat bump 的高度与 A 的实际副本相同。 被创建。这基本上表明 repmat 实际复制了 B 然后进行相等性检查。因为, B 将被复制到一个更大的 float 组,内存需求是巨大的,如前面的内存图中所示。另一方面, bsxfun ,从它的凸起高度来看,它似乎没有复制实际的浮点值,这导致了高效的内存使用。

现在,在转换两个 A 之后 B 到逻辑数组,内存使用 bumps 变成了这个 -

enter image description here

因此,它表明 repmat 然后能够优化内存,因为这次复制是逻辑数据类型。

使用匿名函数 bsxfun : 可以通过 bsxfun 对匿名函数的使用进行一些实验 并查看 MATLAB 在优化内存需求方面是否表现出与内置相同的智能。

所以, bsxfun(@eq,A,B) 可以替换为 bsxfun(@(k1,k2) k1==k2,A,B) 。当对浮点输入数组进行操作时,此内置和匿名函数实现所产生的内存使用情况导致内存图如下所示 -

enter image description here

该图表明匿名函数的使用保持了与内置函数一样的内存效率,即使运行时受到很大阻碍。改用其他关系运算时,测试结果相似。

结论

在对 float 组进行关系运算时,使用 bsxfun 绝对更可取。 超过 repmat 用于运行时和内存效率。所以,这只是证明有更多理由选择 bsxfun !

关于matlab - BSXFUN 关于关系操作的内存效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29800560/

相关文章:

java - 我可以裁剪 .dcm 图像,然后将它们以 .bmp 格式用于我的研究工作吗?

php - 使用 ini_set ("memory_limit", "-1")并且仍然内存不足

c# - 为什么要使用小于 32 位的整数?

java - 如何在不将行加载到内存的情况下查找任何文件中行的长度?

c - 如何为输入的指针分配内存(在 'C' 中)

matlab - 有没有办法在 MATLAB 中安全地修改 mex 文件?

matlab - 使用纬度和经度绘制圆圈

python - 使用 Scipy 将字典从 Python 保存到 Matlab

Android App MAX Data Storage(Internal Memory) Capacity Definition and file Visibility Gallery/3rd party 应用程序

c - 结构函数的不兼容返回类型 - C