首页 > 其他分享 >Matlab代码优化之道

Matlab代码优化之道

时间:2023-11-11 10:22:36浏览次数:48  
标签:数据类型 之道 代码优化 循环 Matlab 使用 repmat 加速 matlab

 一、 遵守Performance Acceleration的规则

关于什么是“Performance Acceleration”请参阅matlab的帮助文件。
1、只有使用以下数据类型,matlab才会对其加速:
logical,char,int8,uint8,int16,uint16,int32,uint32,double而语句中如果使用了非以上的数据类型则不会加速,如numeric,cell,structure,single,function handle,java classes,user classes,int64,uint64
2、matlab不会对超过三维的数组进行加速。
3、当使用for循环时,只有遵守以下规则才会被加速:
a、for循环的范围只用标量值来表示;
b、for循环内部的每一条语句都要满足上面的两条规则,即只使用支持加速的数据类型,只使用三维以下的数组;
c、循环内只调用了内建函数(build-in function)。
4、当使用if、elseif、while和switch时,其条件测试语句中只使用了标量值时,将加速运行。
5、不要在一行中写入多条操作,这样会减慢运行速度。即不要有这样的语句:
x = a.name; for k=1:10000, sin(A(k)), end;
6、当某条操作改变了原来变量的数据类型或形状(大小,维数)时将会减慢运行速度。
7、应该这样使用复常量x = 7 + 2i,而不应该这样使用:x = 7 + 2*i,后者会降低运行速度。

 

二、 遵守三条规则

1、尽量避免使用循环
改进这样的状况有两种方法:
a、尽量用向量化的运算来代替循环操作。


i=0;
for t = 0:.01:10
i = i+1;
y(i) = sin(t);
end
替换为:
t = 0:.01:10;
y = sin(t);
      速度将会大大加快。最常用的使用vectorizing技术的函数有:All、diff、ipermute、permute、reshapen squeeze、any、find、logical、prod、shiftdim、sub2ind、cumsum、ind2sub、ndgrid、repmat、sort、sum 等。    
     请注意matlab文档中还有这样一句补充:
“Before taking the time to vectorize your code, read the section on Performance Acceleration.You may be able to speed up your program by just as much using theMATLAB JITAccelerator instead of vectorizing.”。

b、在必须使用多重循环时下,如果两个循环执行的次数不同,则在循环的外环执行循环次数少的,内环执行循环次数多的。这样可以显著提高速度。

2、预分配矩阵空间
a、预分配矩阵空间,即事先确定变量的大小,维数。这一类的函数有zeros、ones、cell、struct、repmat等。
b、当要预分配一个非double型变量时使用repmat函数以加速,如将以下代码:
A = int8(zeros(100)); 换成:A = repmat(int8(0), 100, 100);
c、当需要扩充一个变量的大小、维数时使用repmat函数。
3、优先使用matlab内建函数
a、优先使用matlab内建函数,将耗时的循环编写进MEX-File中以获得加速。者利用matlab提供的工具将程序转化为C语言、Fortran语言。
b、使用Functions而不是Scripts 。
4、改用更有效的算法

 

参考文章

加速matlab运行的三重境界

matlab最优化问题相关算法

matlab最优化程序

标签:数据类型,之道,代码优化,循环,Matlab,使用,repmat,加速,matlab
From: https://www.cnblogs.com/bbhhh/p/17825580.html

相关文章

  • 基于OFDM的水下图像传输通信系统matlab仿真
    1.算法运行效果图预览  2.算法运行软件版本matlab2022a 3.算法理论概述      基于OFDM的水下图像传输通信系统是一种用于在水下环境中传输图像数据的通信系统。它采用了OFDM(OrthogonalFrequencyDivisionMultiplexing)技术,这种技术在水下通信中具有一些优......
  • 小程序性能优化之JavaScript代码优化
    大家好,今天我们来聊一聊小程序性能优化中的JavaScript代码优化。在编程过程中,我们都喜欢轻松愉快,不想戴着沉重的“全局疯狂”帽子。但有时候,过度使用全局变量会让我们的程序变得难以维护,就像在一片大森林里找寻一个小木屋。这时候,我们就需要考虑一下,是不是该减轻一下我们的“全局疯......
  • matlab将数组值划分为两类
    例如:大于0的处理为1,小于0的处理为-1.当然,可以选择循环结构和选择结构,但是效率会很低。这里直接使用逻辑语句完成。%不使用循环语句,将数组内值划分为两类clc;clearvars;a=[-0.1422,-0.0433,0.1131,0.0583,0.0109,-0.0863,0.0411,-0.0641,-0.1055,......
  • m基于Yolov2和GoogleNet深度学习网络的疲劳驾驶检测系统matlab仿真,带GUI界面
    1.算法仿真效果matlab2022a仿真结果如下:  疲劳状态:    2.算法涉及理论知识概要      疲劳驾驶检测系统是一种基于深度学习网络的系统,它结合了Yolov2和GoogleNet模型,用于检测驾驶员的疲劳状态和人脸。疲劳驾驶检测系统主要包括两个部分:人脸检测和疲劳......
  • 《代码整洁之道》阅读笔记(一)
    第一部分:代码质量的重要性与良好的编码风格第一部分深入探讨了代码整洁之道的核心思想:代码质量和良好的编码风格。这一部分为我提供了一个深刻的认识,即写出高质量的代码不仅是开发者的技能,更是一种责任。作者强调了代码是一种沟通工具,不仅是为计算机执行而编写的。这一部分详细......
  • 【可视化】基于Matlab实现图表视化相关矩阵,相关值显示为左下角的热图,使用颜色渐变来指
     ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,代码获取、论文复现及科研仿真合作可私信。......
  • 【无人机三维路径规划】基于熊气味搜索算法BSSA实现复杂地形无人机避障三维航迹规划附
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,代码获取、论文复现及科研仿真合作可私信。......
  • Matlab决策树、模糊C-均值聚类算法分析大学教师职称学历评分可视化
    全文链接:https://tecdat.cn/?p=34203原文出处:拓端数据部落公众号本文使用Matlab编程语言中的决策树和模糊C-均值聚类算法,帮助客户对大学教师职称、学历与评分之间的关系进行深入分析。背景随着高等教育的快速发展,教师队伍的素质和能力成为了影响高校发展的重要因素。职称和学......
  • matlab贝叶斯隐马尔可夫hmm模型实现|附代码数据
    原文链接:http://tecdat.cn/?p=7973原文出处:拓端数据部落公众号  最近我们被客户要求撰写关于贝叶斯隐马尔可夫hmm的研究报告,包括一些图形和统计输出。贝叶斯隐马尔可夫模型是一种用于分割连续多变量数据的概率模型。该模型将数据解释为一系列隐藏状态生成。每个状态都是重尾......
  • 概率和统计的MATLAB指令
    1、描述性统计分析     描述性统计分析函数标准用法都是对列状数据进行操作。mean(X):当X为向量,返回向量的均值;当X为矩阵,返回矩阵的每列元素均值构成的行向量。min,max,sort,mean,median,std,var,sum,prod,cumsum,sumprod等函数用法与mean类似。cov(X,Y):这里X,Y为向量,分别代......