我有一个如下代码-
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 专家需要您的宝贵建议。
我有一个如下代码-
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 专家需要您的宝贵建议。
只想做些傻事是不够的。您正在生成的数组太大而无法放入内存。
看到矩阵 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。你不会想念他们的。
是的,有时 MATLAB 会耗尽内存。您可以通过执行以下命令在任何时间点获取可用内存量:
memory
但是,我建议遵循其中一种策略来减少此处可用的内存使用量。此外,您可能希望通过以下方式清除每次迭代中不需要的变量
clear variable_name