matlab bsxfun memory,matlab – BSXFUN关于关系操作的内存效率

简介&测试设置

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

A = rand(M,N)

B = rand(1,N)

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

我会使用repmat进行比较,因为它似乎是bsxfun最接近的替代品.所以,这里的想法是运行bsxfun和repmat等效代码,并注意任务管理器(在Windows上)内存使用中的颠簸.

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

REPMAT version: A == repmat(B,size(A,1),1)

BSXFUN version: bsxfun(@eq,A,B))

结果

在运行repmat然后运行bsxfun代码时,Windows任务管理器显示类似这样的内容,第一个表示repmat运行,下一个表示bsxfun表示 –

repmat bump的高度与创建A的实际副本时的高度相同.这基本上表明repmat实际复制B然后进行相等性检查.由于B要复制到更大的浮点数组,因此内存需求量很大,如前面的内存图中所示.另一方面,对于bsxfun,从其凸起高度来看,它似乎不会复制实际的浮点值,从而导致有效的内存使用.

现在,在将A和B都转换为逻辑阵列之后,内存使用量的变化就变成了这个 –

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

使用bsxfun的匿名函数:可以使用bsxfun对匿名函数的使用进行一些实验,看看MATLAB在优化内存需求方面是否与内置函数一样显示出相同的智能性.

因此,bsxfun(@ eq,A,B)可以用bsxfun(@(k1,k2)k1 == k2,A,B)代替.在浮点输入数组上操作时,使用此内置和匿名函数实现产生的内存使用情况会产生如下所示的内存图 –

该图表明,使用匿名函数可以像内置函数一样保持内存效率,即使运行时受到很大限制.当使用其他关系操作时,测试结果是相似的.

结论

在浮点数组上进行关系运算时,最好使用bsxfun over repmat来提高运行时和内存效率.所以,这证明了有更多的理由可以使用bsxfun!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
bsxfunMATLAB中的一个函数,用于对两个数组之间的元素进行逐个计算的二元操作。它可以通过传入函数句柄或者m文件来指定具体的操作。常见的内置函数包括加法、减法、乘法、除法、幂运算等等。你可以使用bsxfun来执行各种元素级别的操作,比如计算矩阵每一列减去其对应列的平均值。 在旧版本的MATLAB中,如果没有内置的bsxfun函数,可以使用一些自定义的方法来实现相同的功能。例如,在R2007a之前的版本中,可以使用一个名为"bsxfun"的mex函数来代替内置的bsxfun函数来执行相同的操作。该mex函数保留了不复制任何大数组以执行其功能的重要功能。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [bsxfun 替代:用 bsxfun 替代旧版本的 MATLAB,其中它不是内置的。-matlab开发](https://download.csdn.net/download/weixin_38515573/19247341)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [MATLAB中的bsxfun函数](https://blog.csdn.net/Yaroo/article/details/78729779)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值