当前位置 : 主页 > 网络安全 > 测试自动化 >

性能 – 为什么这种乘法很慢

来源:互联网 收集:自由互联 发布时间:2021-06-22
我想要乘以2个矩阵.我需要逐个元素地将它们相乘.它们的大小是100×100.但为什么这个功能工作得很慢?大约2-3分钟. for i=1:size(volumes,1) for j =1:size(volumes,2) ys(i,j) = volumes(i,j)*prices(i,j) ende
我想要乘以2个矩阵.我需要逐个元素地将它们相乘.它们的大小是100×100.但为什么这个功能工作得很慢?大约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

如何加快这个操作?

我认为主要的问题是,你忘记了分号;在你的行的末尾,你在那里进行计算.因此,您在命令窗口中显示生成的100×100矩阵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;
网友评论