如何提高 matlab 计算速度 运算效率

最近在网上查了一些资料,并结合自己的经验,就如何提高matlab计算效率,总结一下几个原则:


1. 提前给数组分配大小。

例如:在程序循环时用到数组变量 a ,若知道数组 a 的大小或者知道 a 的大小上界,则可以提前给数组a 分配大小。 一般MATLAB也会给没有提前

分配大小的变量数组下面标示红线,提醒修改。  

a=zeros(10,10)
生成一个10行10列的零矩阵。


a=100*ones(10,10)
生成一个10行10列的矩阵,并且每个元素都是100。

a=(1:10)
生成一个从1到10的1行10列矩阵。


2. 尽量用矢量计算,减少 for 循环。

最近我也才意识到这一点,matlab自带的很多函数都支持矢量计算。直接矢量计算,避免大量的for循环。

用 min 函数举例:

clc

a=(1:1000000);
tic
for i=1:1000000
    a(i)=min(a(i),100);
end
toc

tic
b=max(a,100);
toc


结果显示:

时间已过 0.028604 秒。
时间已过 0.006296 秒。

可见后者比前者的 for 循环快。

3. 尽量调用 maltab自带的函数来实现一些功能。

这个是显而易见的,matlab自带的函数由大神级的matlab开发人员所编写,他们当然会在计算速度上做不少优化,一定比我们编写的好。


4. 少用 find 函数,用 logical 替代。

查找替换矩阵中的元素,过去用 find 函数,现在用 logical 更好。

下面用一个例子,分别测试 for 循环,find函数,logical函数查找替换:

a=(1:10000000);

tic
for i=1:length(a)
    if a(i)>5
        a(i)=1;
    end
end
toc

tic
a(find(a)>5)=1;
toc

tic
a(logical(a)>5)=1;
toc

结果显示:

时间已过 0.407840 秒。
时间已过 0.378585 秒。
时间已过 0.119918 秒


可见,find 函数仅仅比 for 循环快一点,而 logical 函数则显著快于它们。 


5. 必须用到矩阵拼接,可变矩阵时,用 end 拼接矩阵。

例如:

function test
A=cell(3,1);
tic 
N=10000;
for t=1:3
    a=magic(3);
    for i=1:N
        a=[a;magic(3)];
    end
    A{t}=a;
end
toc

B=cell(3,1);
tic
for t=1:3
    B{t}(end+1:end+3,:)=magic(3);
end
toc
end


时间已过 1.723104 秒。
时间已过 0.001621 秒。

6. 大规模的循环,可以调用 c语言或 C++来 计算。

这个见不少资料说,自己还没试过,有机会测试一下。

  • 13
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心态与习惯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值