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

use*_*930 1 windows matlab out-of-memory

情况:如何处理"内存不足"错误.

基本上问题是我使用10800x10800矩阵.我在32位Windows系统上.我执行此操作时出现内存错误:

a=zeros(10800,10800);
Run Code Online (Sandbox Code Playgroud)

这是我得到的记忆:

>> 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.
Run Code Online (Sandbox Code Playgroud)

系统:Windows 32位

Eit*_*n T 5

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

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

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

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

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

  • 3)如果可能的话,使用`single`而不是`double`.这将减少一半所需的内存(如:`zeros([10800,10800],'single')`) (3认同)
  • @Amro:当然可能是更小的类型(`logical`,`int8`,...).当然取决于OP的实际问题 (2认同)