为什么这种乘法很慢

时间:2014-05-28 10:37:41

标签: performance matlab matrix vectorization

我想要乘以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

如何加快这项行动?

1 个答案:

答案 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;