gpt4 book ai didi

matlab - 小矩阵乘以大矩阵

转载 作者:太空宇宙 更新时间:2023-11-03 20:18:50 25 4
gpt4 key购买 nike

我正在尝试将小矩阵(假设 2x2)中的每个元素与大矩阵(假设 4x4)中的每个位置逐个元素相乘。

所以我想:

        1 2 3 4     1 0 3 0
1 0 1 2 3 4 0 0 0 0
0 0 'x' 1 2 3 4 = 1 0 3 0
1 2 3 4 0 0 0 0

small matrix 适合多少次就应用多少次,乘法是一个元素一个元素的。我尝试了很多循环,但在 MATLAB 中感觉不对,一定有更漂亮的方法吗?

最佳答案

一种可能性是使用 repmat 根据需要多次重复小矩阵:

C = repmat(A,size(B,1)/size(A,1),size(B,2)/size(A,2)).*B

另一种避免 repmat 的可能性:切割大矩阵,在第三和第四维排列碎片,并使用 bsxfun 进行乘法:

[m n] = size(A);
[M N] = size(B);
T = permute(reshape(B,M,n,[]), [2 1 3]);
T = permute(reshape(T,n,m,[],size(T,3)),[2 1 3 4]);
C = cell2mat(squeeze(mat2cell(bsxfun(@times,T,A),m,n,ones(1,M/m),ones(1,N/n))));

(这两行 T = ... 进行了切割,并且归因于 A. Donda 。)

这种方法的优点是,如果内存有问题,您可以覆盖 B 而不是定义 T,从而节省内存:

[m n] = size(A);
[M N] = size(B);
B = permute(reshape(B,M,n,[]),[2 1 3]);
B = permute(reshape(B,n,m,[],size(B,3)),[2 1 3 4]);
C = cell2mat(squeeze(mat2cell(bsxfun(@times,B,A),m,n,ones(1,M/m),ones(1,N/n))));

关于matlab - 小矩阵乘以大矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20364344/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com