如何提高电脑运行速度_如何提高MATLAB程序运行速度

更新:鉴于看的人还不少,不得不严谨起来。所有代码写成函数,然后用timeit比较速度。


文中的代码测试环境为MATLAB R2019a,CPU为Intel 8700,睿频至4.3GHz。

1.预分配内存

对于MATLAB新手来说,这是最容易犯的错误之一。

MATLAB中的数组在使用之前不需要明确地定义和指定维数。当赋值的元素下标超出现有的维数时,MATLAB 就为该数组或矩阵扩维一次,这样就会大大降低程序的执行效率。因此,在循环前,预分配内存,可以有效提高程序执行速度。

function 

这种低级错误在循环次数很大时,运行时间会成倍增长。

2.优先使用built-in函数

MATLAB大部分内置函数是m文件,本身也是MATLAB程序,执行效率较低。但有一部分底层的基本函数是built-in函数,执行效率更高,如sum、max、find、exp、fft等等,优先使用built-in函数能够获得更快的执行速度。

一个例子是sum和mean函数,求数组平均值时,sum之后除以数组长度比直接调用mean函数快。

function 

判断一个函数是否是built-in function最直接的手段就是执行edit命令,如

edit 

编辑器会打开exp.m文件,里面没有代码,只有注释,清楚的写明这是一个built-in函数。

7f5082d229c586b7994a2f91b9c56879.png

3.列优先

MATLAB继承了Fortan按列储存的特点,意味着按列计算时,内存命中率更高,速度更快。

function 

上述例子中,对矩阵按列做fft,比按行做fft快一倍。

4.使用局部函数

MATLAB调用函数时,需要搜索该函数并进行匹配,搜索的优先级按照如下:

  • 变量
  • import导入的包函数
  • 当前函数内的嵌套函数
  • 当前文件内的局部函数
  • 私有函数
  • 对象函数
  • @文件夹中的类构造函数
  • 加载的 Simulink模型
  • 当前文件夹中的函数
  • 路径中其他位置的函数

可以看到,搜索时,文件夹内的函数优先级时很低的,如果改用局部函数,则会更快地搜索该函数。

function 

5.稀疏矩阵

一个矩阵中,如果只有少量的非0值,则可以将其用稀疏矩阵来表示。稀疏矩阵仅记录了矩阵中的非0值。当矩阵的稀疏度足够大时,将矩阵转化成稀疏矩阵,可以降低内存占用空间,同时减少计算量。

function 

注意:若矩阵的稀疏度不大,强行转换成稀疏矩阵反而会导致内存占用空间变大,执行效率降低。

6.向量化编程

在新版本的MATLAB中,for循环的执行效率得到很大的提高,但是对于在for循环中进行一些复杂的操作,比如在for循环中改变数组的维数,向量化仍是提升MATLAB执行效率的有效手段。

这里举一个例子,有一个1e6*1的数组A,现在需要去掉数组中索引为1e3的倍数的数,形成一个9.99e5*1的数组。

function 

更新:为何不直接写成A(1e3:1e3:end)=[]的形式,主要是因为MATLAB对大数索引的效率比较低。这里也做一个对比。

function 

7.C/C++混合编程

易夕:MATLAB之C/C++混合编程​zhuanlan.zhihu.com

8.并行计算parfor/spmd

易夕:MATLB并行计算之多进程连续滤波​zhuanlan.zhihu.com

9.GPU加速

易夕:在GPU上运行MATLAB程序​zhuanlan.zhihu.com

10.分布式计算

易夕:MATLAB分布式运算:本地计算机集群配置指南​zhuanlan.zhihu.com

11.终极方案

仅凭软件优化已经无法满足你的需求了,你需要寻求硬件上的升级,i7换至强,内存32G起,CPU/GPU/主板超频,更大规模的本地计算机集群,购买AWS或者Azure等等。

或者,课题组有钱的话,可以直接联系天河一号(天津)、天河二号(广州)、神威太湖之光(无锡)等等。

国家超级计算天津中心

国家超级计算广州中心 - 首页

国家超级计算无锡中心

易夕:MATLAB Tricks 专栏目录​zhuanlan.zhihu.com
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提高MATLAB运行速度,可以采取以下几个方法: 1. 使用矩阵运算代替循环:MATLAB的二维矩阵运算速度非常快,可以将循环转化为矩阵运算来提高效率。例如,可以使用向量代替for循环,并使用矩阵乘法来替循环中的乘法操作。 2. 减少循环嵌套的次数:将循环次数多的放在内层,减少循环嵌套的层数可以提高效率。 3. 提前对矩阵进行初始化:在使用循环计算结果时,提前对矩阵进行初始化,避免在循环中重复进行初始化操作,可以减少运行时间。 4. 尽可能使用内在函数:MATLAB提供了许多内在函数,这些函数经过高度优化,可以提高运行速度。尽可能使用这些内在函数,而不是自己编写的函数,可以提高效率。 另外,如果需要进行大规模的并行计算,可以考虑使用并行运算parfor来加速运行速度。 总之,通过优化代码结构和使用高效的函数,可以有效提高MATLAB运行速度。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [优化matlab运行速度的方案](https://blog.csdn.net/chen10217/article/details/100365465)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [提升MATLAB运算速度的思路](https://blog.csdn.net/pengmingjv/article/details/126902875)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值