为
和而
循环每次通过循环时都会增加数据结构的大小,这会对性能和内存使用产生不利影响。重复调整数组大小通常需要MATLAB®花额外的时间寻找更大的连续内存块,然后将数组移动到这些块中。通常,您可以通过预分配数组所需的最大空间来提高代码执行时间。
下面的代码显示了创建标量变量所需的时间,x
,然后逐渐增大大小x
在一个为
循环。
Tic x = 0;对于k = 2:1000000 x(k) = x(k-1) + 5;toc结束
运行时间为0.301528秒。
如果你预先分配一个1 × 1,000,000的内存块x
并将其初始化为零,那么代码运行速度会快得多,因为不需要为不断增长的数据结构重复重新分配内存。
Tic x = 0 (1,1000000);对于k = 2:1000000 x(k) = x(k-1) + 5;toc结束
经过的时间是0.011938秒。
对你想初始化的数组类型使用适当的预分配函数:
0
对于数值型数组
细胞
对字符数组
当你预先分配一个内存块来保存某种类型的矩阵而不是双
,避免使用该方法
一个= int8 (0 (100));
这个语句预先分配了一个100乘100的矩阵int8
,首先创建一个完整的矩阵双
值,然后通过将每个元素转换为int8
.将数组创建为int8
值节省时间和内存。例如:
A = 0 (100, 'int8');