mask调试matlab,在Matlab中优化mask函数

这篇博客探讨了在Matlab中优化mask函数的方法,通过对比不同实现方式的运行时间,包括使用find、reshape、bsxfun和repmat等。尽管Matlab通常使用JIT编译提升性能,但在某些情况下仍不敌Numpy。博主分享了不同解决方案的性能测试数据,并寻求进一步的优化建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

没有基准就没有优化!所以这里有一些建议的解决方案和性能度量。初始化代码为:N = 2000;

nk = 10;

where = false([N, N]);

where(1:100, 1:100) = 1;

data = (5.+j)*ones([N, N, nk]);

我用函数timeit对函数计时,如下所示:

^{pr2}$

作为比较,当我对问题中给出的Numpy函数执行完全相同的操作时,它的运行速度是0.0167s

带有2个循环的初始Matlab函数运行时间约为0.34秒,等效Numpy函数(有2个循环)运行速度较慢,运行时间为0.42秒。这可能是因为Matlab使用JIT编译。在

我可以删除reshape,因为find已经返回了线性索引。我喜欢它,因为代码更简洁,但是reshape无论如何都非常便宜,因此它并不能真正提高函数的性能:function dealiasing2d(where, data)

[n1, n0, nk] = size(data);

N = n0*n1;

ind_zeros = find(where);

for ik=1:nk

data(ind_zeros + N*(ik-1)) = 0;

end

这个函数需要0.23秒,比有两个循环的解决方案快,但与Numpy解决方案相比非常慢(慢14倍!)。这就是我写问题的原因。在

这个解决方案涉及N*N*nk乘法(乘1或0),这显然是太多的工作,因为我们只需将100*100*nk值放入数组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值