【问题标题】:Large Vector Outer Product Matlab大向量外积 Matlab
【发布时间】: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


【解决方案1】:

您是否考虑过将pdist 与自定义距离函数一起使用

sigmaCompact = pdist( x(:), @(x, Y) x.*Y );
sigma = squareform(sigmaCompact);

高达sigma( k, k );的特殊处理

【讨论】:

  • Shai 我正在运行它。会让你知道的。
  • @diplodocuscoffeespot - 进展如何?
  • 我有严重的内存问题,所以无法运行完整集。对于较小的向量,它似乎运行得更快。感谢提示
猜你喜欢
  • 2023-04-08
  • 2016-01-09
  • 1970-01-01
  • 2014-09-06
  • 1970-01-01
  • 2018-05-09
  • 2016-12-01
  • 2015-08-03
  • 1970-01-01
相关资源
最近更新 更多