情况:如何处理“内存不足”的错误。
基本上问题是我使用了10800x10800matrix。 我在32位的Windows系统上。 当我这样做时,出现内存不足错误:
a=zeros(10800,10800);
这是我得到的内存:
>> memory Maximum possible array: 393 MB (4.120e+08 bytes) * Memory available for all arrays: 1097 MB (1.150e+09 bytes) ** Memory used by MATLAB: 639 MB (6.697e+08 bytes) Physical Memory (RAM): 895 MB (9.387e+08 bytes) * Limited by contiguous virtual address space available. ** Limited by virtual address space available.
系统:Windows 32位
矩阵存储在连续的存储块中。 当处理非常大的矩阵时(这是因为可能找不到足够大的空闲块),分配这样的块可能是有问题的。
既然你没有提供任何有关你的代码的细节,我只能建议一些方法来解决这个问题:
如果矩阵包含很多零,则将其表示为稀疏矩阵 。 它通过不存储零来使用较少的存储器来存储这样的矩阵。
将你的矩阵分解成更小的块,并相应地修改你的算法。
如果他们能够适应您所使用的数值范围,请使用更有效的数据类型(而不是双精度)(对此建议感谢Amro和Rody)。 考虑使用单精度或整数数据类型 (并注意无符号整数!)。
如果矩阵的重要部分将保持为零,则使用稀疏矩阵
S = sparse(10800, 10800)
如果情况并非如此(矩阵密集),您可以选择以下选项: