【问题标题】:Matrix multiplication across blocks - MATLAB跨模块的矩阵乘法 - MATLAB
【发布时间】:2016-09-08 14:30:41
【问题描述】:

假设我有 2 个矩阵,例如:

A = [1 2;
     3 4;
     5 6];

B = [1 1 1;
     2 2 2;
     3 3 3;
     4 4 4;
     5 5 5;
     6 6 6];

我想做的是将Aith 行与B 中的2*(i-1)+12*i 行相乘,例如:

[1 2]*[1 1 1;2 2 2]

并将结果组合在一起。结果矩阵的大小为 3X3。我当然知道我可以做一个 for 循环来得到我的结果。但是我的AB其实很大,所以for循环太费时间了。

有人可以给我任何关于如何在没有 for 循环的情况下执行此操作的建议吗?非常感谢您的帮助。

【问题讨论】:

  • 请尝试并发布您的代码。这不是代码编写服务,但如果您也可以投入一些工作,社区可以为您提供帮助。
  • 嗨,Fencer04,我不是要求别人为我写代码。我只是想也许有人做过类似的工作,可以给我一些建议。或许你有什么建议?
  • 您可以使用reshape,然后使用bsxfun 来并行处理。
  • 非常感谢@GameOfThrows!您的建议非常好,我将 A 分隔为列,将 B 分隔为奇数行矩阵和偶数行矩阵,并像 bsxfun(@times, B_odd, A(:,1)) 一样使用,最后将它们组装在一起。真的很棒。对于我的 Matrix 大小为 2601X2 的情况,计算时间从 0.43s 减少到 0.0041s,真是太神奇了!!!

标签: matlab matrix vectorization matrix-multiplication


【解决方案1】:

正如cmets中提到的,bsxfun可以在重塑B之后使用,就像这样-

squeeze(sum(bsxfun(@times,reshape(B,size(A,2),[],size(B,2)),A.'),1))

【讨论】:

  • 不错的答案,我正要点击 send 或多或少相同。
  • 太棒了!也谢谢,真的学到了很多。我正在考虑在 matlab 中永远放弃 for 循环!
  • @JayWang 就是这样! ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-09
  • 1970-01-01
  • 1970-01-01
  • 2012-09-25
  • 1970-01-01
相关资源
最近更新 更多