-1

我有一个如下代码-

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 运行这些代码时,它会显示错误消息“内存不足”。我需要保持这些代码原样。如何修改这些代码以获得更大的“i”值?

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

4

2 回答 2

1

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

看到矩阵 s 的大小是 i 的函数。大小将是 2^(2*i) 乘以 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 的内存!如果你有那么多内存,那就给我寄几 TB 的 RAM。你不会想念他们的。

于 2013-08-10T14:06:43.477 回答
0

是的,有时 MATLAB 会耗尽内存。您可以通过执行以下命令在任何时间点获取可用内存量:

memory

但是,我建议遵循其中一种策略来减少此处可用的内存使用量。此外,您可能希望通过以下方式清除每次迭代中不需要的变量

clear variable_name
于 2013-08-10T12:38:50.340 回答