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