我有一个如下代码 -
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专家需要您宝贵的建议。
答案 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