提高性能的技术
要加快代码的性能,请考虑这些技术。
环境
请注意,共享计算资源并降低MATLAB性能的后台进程®代码。
代码结构
组织代码:
使用函数而不是脚本。功能通常更快。
更喜欢嵌套函数的本地功能。特别是如果函数不需要在主函数中访问变量,请使用此操作。
使用模块化编程。为避免具有不经常访问代码的大文件和文件,将代码拆分为简单且凝聚力的功能。这种做法可以减少第一次运行成本。
性能编程实践
考虑这些编程实践以提高代码的性能。
preallocate - 而不是连续调整阵列,请考虑预先释放数组所需的最大空间量。有关更多信息,请参阅预先分配。
Vectorize - 而不是编写基于循环的代码,请考虑使用MATLAB矩阵和矢量操作。有关更多信息,请参阅矢量化。
将独立的操作放在循环外 - 如果代码没有与每个代码进行不同的评估
为了
要么尽管
循环迭代,将其移动到循环之外,以避免冗余计算。如果数据类型更改,则创建新变量 - 创建一个新变量,而不是将不同类型的数据分配给现有变量。更改现有变量的类或数组形状需要额外的时间来处理。
使用短路操作员 - 使用短路逻辑运算符,
&&
和||
如果可能。短路更有效,因为Matlab仅在第一个操作数未完全确定结果时才评估第二操作数。有关更多信息,请参阅逻辑运算符:短路
。避免全局变量 - 最大限度地减少全局变量的使用是一个很好的编程实践,全局变量可以降低MATLAB代码的性能。
避免内置内置 - 避免在任何标准MATLAB数据类上重载内置功能。
避免使用“数据作为代码” - 如果您有大量的代码(例如,超过500行)生成具有常量值的变量的代码(例如,500行),请考虑构建变量并将它们保存在Mat文件中或保存它们
.csv.
文件。然后,您可以加载变量而不是执行代码以生成它们。
特定提示马铃薯草职能
在编写性能关键代码时,请考虑特定MATLAB函数的以下提示。
避免清除比必要更多的代码。不使用
清除所有
以编程方式。有关更多信息,请参阅清除
。避免查询MATLAB状态的函数,如
InputName.
那哪一个
那谁是
那存在(
, 和var.
的)DBStack.
。运行时间内部升值是计算昂贵的。避免诸如
求解
那evalc.
那评价
, 和Feval(
。使用功能句柄输入到Fname.
的)Feval.
只要有可能。间接评估来自文本的MATLAB表达式是计算昂贵的。避免程序使用
光盘
那addpath.
, 和rmpath.
, 如果可能。在运行时更改MATLAB路径导致代码重新编译。