我想把两个矩阵相乘。我需要把它们逐元素相乘。它们的尺寸是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如何加快这一行动?
发布于 2014-05-28 10:52:42
我认为最主要的问题是,您忘记了行尾的分号;,在这里进行计算。因此,您将在命令窗口中显示结果的100x100矩阵ys 10000。看上去很费时。(2到3分钟的时间还是太多了)。
此外,您还应该预分配 ys。否则,ys在每次迭代时都会按顺序增长,可能会发生内存不足和ys需要复制到内存中不同位置的情况,这也需要时间。通过预先分配,您可以为整个循环预留空间。你可能会发现这个答案很有趣。
因此:
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一切都会好起来的。
但是除了之外,还可以使用 元素乘法算子 .*!
ys = volumes.*prices;https://stackoverflow.com/questions/23909302
复制相似问题