【发布时间】:2016-04-13 01:35:45
【问题描述】:
给定一个矩阵A,我需要与其他n 向量Bi(即i=1...n)相乘。 A 的大小可以类似于5000x5000,因此Bi 可以类似于5000x1。
如果我按以下方式评估产品:
for i=1:n
product=A*Bi;
% do something with product
end
结果是比计算产品慢的方式(数量级),例如:
%assume that S is a matrix that contains the vectors Bi as columns, i.e. S(:,i)=Bi, then:
results=A*S; %stores all the products in matrix form
% do something with results
问题是向量Bi 的数量n 可能太大而无法存储在内存中,例如n=300000,所以我需要使用循环方法,每次评估产品时,使用然后丢弃向量Bi。
为什么这种方法比直接乘法慢,有没有办法克服这个问题?
【问题讨论】:
-
说真的,mathworks 应该对此做一个适当的基准测试,并在某处用大的霓虹绿字母打印出来。这个问题已经被问过很多次了,而且还在被问到。显然,网络上的答案对某些人来说还不够好,那么为什么 mathworks(对源代码有更好的洞察力)不尝试这样做呢? @xarz 没有双关语问。如果网络上的答案不令人满意,那么这个问题显然没有足够好的答案。
-
@patrik 也许你是对的,但我查看了 stackoverflow 并没有找到处理这个确切问题的主题。顺便说一句,如果你可以在这里链接一些处理这个确切问题的参考资料,它们可能对未来的读者有用。谢谢。
标签: performance matlab matrix matrix-multiplication memory-efficient