如何运行大变量的代码

时间:2013-08-10 12:25:05

标签: matlab

我有一个如下代码 -

W = 3;
i = 4;
s = fullfact(ones(1,i)*(W + 1)) - 1;
p2 = unique(sort(s(sum(s,2) == i,:),2),'rows');

我只能运行此代码到“i = 11”但我想运行此代码为“i = 25”。当我为i = 12运行这些代码时,它会显示错误消息“Out of Memory”。 我需要保留这些代码。如何修改这些代码以获得更大的“i”值?

Matlab专家需要您宝贵的建议。

2 个答案:

答案 0 :(得分:1)

只想做愚蠢的事情是不够的。您正在生成的数组太大而无法放入内存中。

看到矩阵s的大小是i的函数。 i的大小为2 ^(2 * i)。 (顺便说一句,有些人会认为使用i作为变量,通常是sqrt(-1),对于这样的变量是一个坏主意。)

所以当i = 4时,s只有256x4。

当i = 11时,s为4194304x11。这个数组需要369098752个字节的空间,所以370兆字节。

当i = 25时,数组的大小为

2^50*25
ans =
   2.8147e+16

乘以8得到所需的内存。像224 PB的内存!如果你有那么多内存,那么给我发几兆兆字节的内存。你不会错过他们的。

答案 1 :(得分:0)

是的,有时MATLAB内存不足。您可以通过执行以下操作获得任何时间点的可用内存量:

memory

但是,我建议遵循其中一种策略来减少可用的内存使用量here。此外,您可能希望通过

清除每次迭代中不需要的变量
clear variable_name