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处理器。请帮忙!
答案 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
大小。)