跨块矩阵乘法 - MATLAB
Matrix multiplication across blocks - MATLAB
假设我有 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
的第 i
行与 B
的 2*(i-1)+1
到 2*i
行相乘,例如:
[1 2]*[1 1 1;2 2 2]
并将结果组合在一起。结果矩阵的大小将为 3X3。我当然知道我可以做一个 for 循环来得到我的结果。但是我的A
和B
其实很大,所以for循环太费时间了。
有人可以给我任何关于如何在没有 for 循环的情况下执行此操作的建议吗?非常感谢您的帮助。
如评论中所述,bsxfun
可以在重塑B
后使用,就像这样-
squeeze(sum(bsxfun(@times,reshape(B,size(A,2),[],size(B,2)),A.'),1))
假设我有 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
的第 i
行与 B
的 2*(i-1)+1
到 2*i
行相乘,例如:
[1 2]*[1 1 1;2 2 2]
并将结果组合在一起。结果矩阵的大小将为 3X3。我当然知道我可以做一个 for 循环来得到我的结果。但是我的A
和B
其实很大,所以for循环太费时间了。
有人可以给我任何关于如何在没有 for 循环的情况下执行此操作的建议吗?非常感谢您的帮助。
如评论中所述,bsxfun
可以在重塑B
后使用,就像这样-
squeeze(sum(bsxfun(@times,reshape(B,size(A,2),[],size(B,2)),A.'),1))