1

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

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

4

2 回答 2

5

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

由于您没有提供有关代码的任何详细信息,因此我只能建议规避此问题的方法:

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

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

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

于 2013-04-22T09:23:38.990 回答
2

如果矩阵的很大一部分将保持为零,请使用稀疏矩阵

S = sparse(10800, 10800)

如果不是这种情况(矩阵很密集),您有以下选项:

  • 使用几个较小的矩阵部分解决问题。
  • 使用具有大量内存和Matlab 64 位的计算机来使用大型密集矩阵。
于 2013-04-22T09:22:24.837 回答