为什么不建议在matlab中用循环?

循环是程序流程控制的三大剑客之一,没有循环可以说好多功能都不能实现。MATLAB作为一种特殊的编程语言,其在循环的优化上并不是特别出色,但在矩阵化运算(也称矢量化运算)上具有较其他编程语言不可比拟的优势。

为了比较在matlab中for循环与向量化运算的差别,在此做一个小实验,实验过程如下:

在matlab中计算1000到10000大小的矩阵相乘,为了节约时间,以500为矩阵大小的步长。在每一个尺度下,进行十次重复计算然后平均计算时间。下图不同矩阵大小与计算所花时间的关系图,以及不同矩阵大小与for循环所花时间和向量化计算时间之比:

1a174a7bfb96dcb9fa30a1119a89da98.png

图1. 不同矩阵大小与计算所花时间

0aa363a3f51a3ee221e045a391b52940.png

图2. 不同矩阵大小与for循环所花时间和向量化计算时间之比

从图中不难发现,在MATLAB中矢量化计算比for循环计算显著的优势,尤其时当矩阵尺度较大时,矢量化计算的优势越明显。当然,并不是所有情况下都能采用矢量化计算,得根据实际情况来确定。矢量化计算高效便捷、公式化、代码直观并于阅读,但其编程韵味略显不足。本文相关代码放置文末,感兴趣得小伙伴可以试一试。

关联阅读>>>>>

30多个实用matlab编程技巧

宁用循环也不要用这几个matlab函数

本文相关源程序:

clc;clear;N   = 1000:500:10000; % 定义不同尺度的矩阵大小
len = length(N);     % 
tf  = zeros(1,len);  % 存储for循环时间
tv  = zeros(1,len);  % 存储矢量运算时间
for k = 1:len    
    C   = zeros(N(k));    
    D   = zeros(N(k));    
    tft = zeros(1,10);    
    tfv = zeros(1,10);    % 为了使计算结果更有说服力,每个尺度计算十次然后取时间平均    
    for u = 1:10        % 定义两个计算用矩阵        
        A   = rand(N(k));        
        B   = rand(N(k));                
        % for循环计时        
        tic;        
        for m = 1:N(k)            
            for n = 1:N(k)                
                C(m,n) = A(m,n)*B(m,n);            
            end        
        end        
    tft(u) = toc;  
    end             
    % 矢量运算计时       
    tic;        
    D = A.*B;        
    tfv(u) = toc;    
    tf(k) = mean(tft);    
    tv(k) = mean(tfv);
end
% 绘制图像
plot(N,tf,'r.-',N,tv,'b.-');

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值