【发布时间】:2013-01-17 00:55:51
【问题描述】:
我想在 Matlab 中计算同一向量的外积。一个有代表性的例子是:
x=rand(1e5,1);
sigma=x*x'-spdiags(x,0,length(x),length(x));
有什么明显的方法可以加快速度吗? x*x' 是一个对称矩阵,但还没有找到一种方法来帮助 Matlab 使用该信息来加快速度。
编辑:有一种方法可以通过循环来做到这一点,但我还看不到好处:
for k=1:length(x)
sigma(k:length(x),k)=x(k).*x(k:length(x));
end
以上可能适用于稀疏数组。
【问题讨论】:
-
对了,你为什么不用
kron(x, x')? -
我相信Kron不支持多线程。我可能错了。我能想到的唯一其他事情是 bsxfun(@times,x,x')。
-
MATLAB 向量/矩阵乘法应该是最快的,所以我认为
*或bsxfun就可以了。使用x*x'的对称属性确实可以带来×2 的加速,但不会提高运行时间复杂度。 -
@EitanT 事实上,使用 Kron 运行它比使用常规
*慢得多,最终我的内存不足。不幸的是,对于这种大小的x,我用两种方法都耗尽了内存,所以我用了x的一半大小来测试它。 -
x 的大小是多少?
标签: matlab matrix-multiplication