我需要使用非常大的矩阵执行矩阵乘法,例如5000x13 * 13x2000000
。这会导致错误消息,因为我没有足够的内存。我理解这一点。
现在,克服这个记忆问题的最佳策略是什么?
答案 0 :(得分:1)
我的建议是拆分你想要生成的数组。即使您生成阵列,也无法存储它!在MATLAB中,5000乘200万大于数组大小限制!此限制适用于每个数组的大小,而不是所有MATLAB数组的总大小。所以问题不是来自乘法。 我的建议是你用输出矩阵的四个块每5000到500K并分别写出每个块的乘法。
答案 1 :(得分:0)
您可以使用高数组。他们有关于乘法顺序的一些怪癖,所以你可能想要查阅文档。你对你想要的东西并不是很具体,所以假设你想要找到矩阵乘法的平均值。以下是使用高阵列的方法:
a = rand(5000,13).';
b = tall(rand(13,2000000).');
c = b * a;
d = mean(c,1);
e = gather(d).';
请注意,在高数组乘法中,只允许一个矩阵为高,如果高数组与另一个矩阵相乘,则高数组必须先出现。这就是为什么我使用transposes相当自由。