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

Matlab: Out of memory error during multiplication operation

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

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

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.

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

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

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