如何解决在10800x10800matrix的Matlab内存不足错误?

情况:如何处理“内存不足”的错误。

基本上问题是我使用了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位

矩阵存储在连续的存储块中。 当处理非常大的矩阵时(这是因为可能找不到足够大的空闲块),分配这样的块可能是有问题的。

既然你没有提供任何有关你的代码的细节,我只能建议一些方法来解决这个问题:

  1. 如果矩阵包含很多零,则将其表示为稀疏矩阵 。 它通过不存储零来使用较少的存储器来存储这样的矩阵。

  2. 将你的矩阵分解成更小的块,并相应地修改你的算法。

  3. 如果他们能够适应您所使用的数值范围,请使用更有效的数据类型(而不是双精度)(对此建议感谢Amro和Rody)。 考虑使用单精度或整数数据类型 (并注意无符号整数!)。

如果矩阵的重要部分将保持为零,则使用稀疏矩阵

 S = sparse(10800, 10800) 

如果情况并非如此(矩阵密集),您可以选择以下选项:

  • 用几个较小的矩阵解决问题。
  • 使用有大量内存和Matlab 64位的计算机使用大型密集矩阵。