我想要乘以2个矩阵。我需要逐个元素地将它们相乘。它们的大小是100x100。但为什么这个功能工作得很慢?大约2-3分钟。
for i=1:size(volumes,1)
for j =1:size(volumes,2)
ys(i,j) = volumes(i,j)*prices(i,j)
end
end
如何加快这项行动?
答案 0 :(得分:7)
我认为主要问题是,您在行的末尾忘记了分号;
,在那里进行计算。因此,您要在命令窗口中显示生成的100x100
矩阵ys
10000 次。这可能需要花时间。 (仍然2-3分钟甚至太多了)。
此外,您应预分配 ys
。否则ys
在每次迭代时都会在数组化中增长,可能会发生内存不足并且需要将ys
复制到内存中的其他位置,这也需要时间。通过预分配,您可以为整个循环保留空间。您可能会发现this answer很有趣。
因此:
ys = zeros(size(volumes));
for i=1:size(volumes,1)
for j =1:size(volumes,2)
ys(i,j) = volumes(i,j)*prices(i,j);
end
end
它会正常工作。
但除此之外使用elementwise-multiplication operator .*
!
ys = volumes.*prices;