2. 使用稀疏矩阵或将矩阵转化成稀疏形式 sparse
如果矩阵中有大量的0,最好存储成稀疏形式。稀疏形式的矩阵使用内存更少,执行时间更短。例如:
000×1000的矩阵X,它2/3的元素为0,使用两种存储方法的比较:
Name
Size
Bytes
Class
X
1000x1000
8000000
double array
Y
1000x1000
4004000
double array (sparse)
3. 尽量避免产生大的瞬时变量,把没必要的变量clear掉或当它们不用的时候应该及时clear。
4. 减少变量,尽量的重复使用变量(跟不用的clear掉一个意思)。
5. 把有用的变量先save,后clear掉,需要时再读出来。
下面介绍一下关于clear、save、load的特殊用法,这对在for或while等多重循环里出现out of memory非常有效。
for k = 1:N % N为循环次数
var0 = k; % 获得变量var0
%----------------------
string = [sprintf('var_%d', k) ' = var0;' ];
eva l(string); %等价于 var_k = var0;
save(sprintf('var_%d.mat', k), sprintf('var_%d')); %等价于 save var_k.mat var_k
clear(sprintf('var_%d')); %等价于 clear var_k
end
如果要读取刚才存取的变量var_k, (k = 1,2, ..., N). 那么,可以使用如下用法:
for k = 1:N
load(sprintf('var_%d.mat', k)); %等价于 load var_k.mat k = 1,2, ..., N
end
另外,还有一些非常有用的用法。如果用清除刚才读取的变量 var_k, k = 1, 2, ..., N
clear '-regexp' '^var_' % 清除所有以“ var_”开头的变量
还有很多关于save、clear、load等用法,具体help一下。
6. 使用单精度 single短整数替代双精度 double
Matlab 默认的数字类型是双精度浮点数 (double),每个双浮点数占用 8个字节。对于一些整数操作来说,使用双浮点数显得很浪费。在 Matlab 中可以在预先分配数组时指定使用的数字类型如以下命令:zero(10, 10, ‘uint8′)。对于浮点数,在很多精度要求不高的情况下,可以使用4个字节的单浮点数 (single),可以减少一半的内存。关于单、双浮点数的精度对照如下,以便根据需要选择使用:
single: 精度 (1.1921e-007)最大数 (3.4028e+038)
double: 精度 (2.2204e-016)最大数 (1.7977e+308)