use*_*748 5 matlab vector vectorization
重复载体的最有效方法是什么?
我目前的印象repmat是优于其他任何方法?或者这种心态是否可怕?
是否可以repmat使用不同的技术生成完全相同的结果?也许是普通的矩阵乘法?
我想对您的所有兴趣和支持性答案表示最衷心的感谢!
AER
bsxfun如果起始向量很长或者重复次数足够大(见下文),则底线比你要求的更快,否则矩阵乘法更有效.在两者之间,你已经问过它看起来像矩阵乘法+重塑效率提高了约3倍repmat.我使用timeit了以下方法,我创建了一个1e5元素的随机向量,并检查了创建100个重复所需的时间:
v=rand(1e5,1);
f1=@()repmat(v,[100,1])
f2=@() reshape(v*ones(1,100),[],1);
timeit(f1)
ans =
0.1675
timeit(f2)
ans =
0.0516
Run Code Online (Sandbox Code Playgroud)
然而bsxfun更快:
f3=@() reshape(bsxfun(@times,v,ones(1,100)),[],1)
timeit(f3)
ans =
0.0374
Run Code Online (Sandbox Code Playgroud)
这是对这一观察的更仔细的研究:
给定一个向量是1000个元素长,重复10到1e5次会产生以下性能时间:

对于较小的重复序列bsxfun,矩阵乘法与矩阵乘法之间几乎没有差别,但是当重复次数超过1e3时,bsxfun胜利清楚.
然而,仅使用具有相同重复范围的10个元素长向量,表明矩阵乘法更有效.bsxfun只有在10 ^ 5次重复之后才开始变得更好,但即便如此,它只会快〜5%(未显示):

所以它真的取决于你所追求的.在Loren on the Art of MATLAB blog上可以找到进一步的讨论.