Matlab:乘法运算期间内存不足错误

时间:2016-02-14 08:23:35

标签: matlab out-of-memory

 R = randn(960,d); creates a matrix of random numbers.

我有另一个维度X的矩阵1000000 by 960。当我在做手术时

B = (X*R >=0) ;

我收到错误

Error using  * 
Out of memory. Type HELP MEMORY for your options.

代表d = 4096。但是,d < 4096 esp没有错误。除d = [32 64 128 256 512 1024 2048 ]的情况外,d>4096没有问题。 X具有单精度格式的数据元素。

键入memory给出

Maximum possible array:              15663 MB (1.642e+010 bytes) *
Memory available for all arrays:     15663 MB (1.642e+010 bytes) *
Memory used by MATLAB:                4706 MB (4.935e+009 bytes)
Physical Memory (RAM):                8151 MB (8.547e+009 bytes)

*  Limited by System Memory (physical + swap file) available.

我不知道如何解决这个问题。我在Windows 64位操作系统上运行Matlab 64位2011b版本,具有8 GB RAM和i7处理器。请帮忙!

1 个答案:

答案 0 :(得分:1)

这里有一些小数学可以派上用场 在Matlab中,单精度中的1个元素在内存中占用4个字节,而双精度中的1个元素占用8个字节 X(单精度)的大小为1000000 * 960个元素,每个4字节,总计3.84 GB。
R(双精度)的大小为960 * 4096个元素,每个8字节,总计0.0315 GB。

现在问题是产品X*R,必须预先分配然后对其进行评估,以便在B上提供逻辑索引。矩阵X*R的大小为1000000 * 4096,并且假设这样的矩阵是单精度的(据我所知,双精度和单精度之间的乘积也是单一的),它将占用16GB之类的东西。这肯定会阻塞物理内存和虚拟内存(并且内存命令中的16GB也大于Maximum possible array大小。)