前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >为什么不建议在matlab中用循环?【文末有彩蛋】

为什么不建议在matlab中用循环?【文末有彩蛋】

作者头像
巴山学长
发布2021-11-15 12:49:31
9410
发布2021-11-15 12:49:31
举报
文章被收录于专栏:巴山学长巴山学长

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

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

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

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

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

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

本文相关源程序:

代码语言:javascript
复制
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;                % 矢量运算计时        tic;        D = A.*B;        tfv(u) = toc;    end    tf(k) = mean(tft);    tv(k) = mean(tfv);end% 绘制图像plot(N,tf,'r.-',N,tv,'b.-');
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-11-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 巴山学长 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档