146*_*ian 3 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
Run Code Online (Sandbox Code Playgroud)
如何加快这个操作?
我认为主要问题是,你;在行的末尾忘记了分号,你在那里进行计算.因此,您在命令窗口中显示结果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
Run Code Online (Sandbox Code Playgroud)
它会工作正常.
但除此之外,使用元素乘法运算符 .*!
ys = volumes.*prices;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
94 次 |
| 最近记录: |