【发布时间】: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];
我想做的是将A 的ith 行与B 中的2*(i-1)+1 到2*i 行相乘,例如:
[1 2]*[1 1 1;2 2 2]
并将结果组合在一起。结果矩阵的大小为 3X3。我当然知道我可以做一个 for 循环来得到我的结果。但是我的A和B其实很大,所以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