2016-02-14 103 views
1
R = randn(960,d); creates a matrix of random numbers. 

我有尺寸1000000 by 960的另一个矩阵X期间内存不足错误。当我做了手术Matlab的:乘法运算

B = (X*R >=0) ; 

我得到的错误

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

d = 4096。但是,d < 4096尤其没有错误。 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. 

我不知道我怎么能解决这个问题。我在运行8位内存和i7处理器的Windows 64位操作系统上运行Matlab 64位2011b版本。请帮忙!

+2

通过在命令窗口中输入“全部清除”来清除工作空间,然后重新输入“内存”。输出是什么? – Alessiox

+2

只要做数学!如果大小为1000000 * 4096,则需要31250 MB来存储乘法结果。 – Daniel

回答

1

这里有一点小数学方便。
在Matlab中,单精度单元占用4字节内存,而双精度单元占用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大小)。

+0

我明白了,谢谢你的回复。你能否建议类似的问题的解决方案?对于960或更高阶的方阵,我的尺寸为960的另一个矩阵的结果转置运算出现内存错误。物理内存限制是否也会导致转置和乘法错误? – Sm1

+0

我已将虚拟内存大小增加到16GB(在完成Mathworks的建议之后),但问题仍然存在。 – Sm1

+1

一个960 * 960矩阵占用7MB的东西(如果是双精度的),所以对于像你这样的PC来说,它不应该是一个大问题。尝试从工作区中清除不使用的变量,特别是现在您正在处理大矩阵。一次运行1个任务,假设执行转置,从工作空间清除不必要的变量,然后继续执行以下任务。在更改虚拟内存大小后,您是否也重新启动了您的PC?我认为,如果重新启动,Windows会更快乐。 – Alessiox