如何修复Matlab中10800x10800矩阵的内存不足错误?

时间:2013-04-22 09:18:09

标签: windows matlab out-of-memory

情况:如何应对“出局 记忆“错误。

基本上问题是我使用10800x10800矩阵。我在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位

2 个答案:

答案 0 :(得分:5)

矩阵存储在连续的内存块中。在处理非常大的矩阵时,这些块的分配可能会有问题(仅仅因为可能找不到足够大的可用内存块)。

由于您未提供有关代码的任何详细信息,因此我只能提出解决此问题的方法:

  1. 如果您的矩阵包含大量零,请将其表示为sparse matrix。它通过不存储零来使用较少的内存来存储这样的矩阵。

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

  3. 如果它们可以容纳您正在使用的值范围,则使用更高效的数据类型而不是双精度(对于此建议,可归功于Amro和Rody)。考虑使用single precisioninteger data types(并注意无符号整数!)。

答案 1 :(得分:2)

如果矩阵的很大一部分保持为零,请使用Sparse matrix

S = sparse(10800, 10800)

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

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