我在MATLAB中使用元素乘法,其中我拥有的最大矩阵是120x50矩阵。在下面的代码中,weight_N_120{i,1}{j,1}
是一个单元格,i
单元格包含10000个其他单元格。在这10000个单元格的每一个中,我有一个矩阵,其尺寸为120 i
。 ind_ExRet_N{i,1}{j,1}
也是如此。
for i = 2:50
for j = 1:10000
weight_ExRet_NS{i,1}{j,1} = weight_N_120{i,1}{j,1}.*ind_ExRet_N{i,1}{j,1};
end
i
end
当我运行时,我收到错误:
{Error using .*
Out of memory. Type HELP MEMORY for your options.
Error in PCA (line 26)
weight_ExRet_NS{i,1}{j,1} = weight_N_120{i,1}{j,1}.*ind_ExRet_N{i,1}{j,1};
Error in run (line 64)
evalin('caller', [script ';']);
}
我意识到它在i = 30
时停止运行,所以这意味着没有足够的内存用两个120乘30的矩阵进行元素乘法运算。我该如何解决这个问题?
答案 0 :(得分:1)
我试图估计({mavices in} weight_ExRet_NS
的预期内存消耗。如果所有矩阵都是120x50(类型double
),这是一个轻微的低估(由于单元格):
<强> 120 * 50 * 50 * 10000 *一千○二十四分之八/ 1024 = 22888 强>
答案是在Mb。认为你还有2个单元格数组,它们的大小应该相似。我认为你已经达到极限。看起来像一个桶,最后填满了倒。你需要做的是考虑你是否需要所有这些数据和精确度。如果仍然如此,那么你应该将其分块并独立使用它。如果可以动态擦除(或覆盖)某些数据,您也应该这样做。