multiply a matrix into every block matrix in a big matrix
Show older comments
Hi there,
Here I want to multiply a matrix H into every block matrix Aij in the matrix A, i.e.,

Are there any codes can realize this? so I do not need to repeat the manipulation of the multiplication.
Best regards
1 Comment
Tony Cheng
on 27 Nov 2024
Accepted Answer
More Answers (2)
Hc=[1,2;3,4];
A=kron(ones(3),eye(2)); %2x2 blocks Aij
blockheight=2;
result=reshape( Hc*reshape(A,blockheight,[]) , [],width(A))
Example data
H = [1,2;3,4];
rng(100);
A = rand(4,6);
Result
R = blockproc(A,[2 2],@(B) H*B.data)
Check
isequal(R,[H*A(1:2,1:2),H*A(1:2,3:4),H*A(1:2,5:6);H*A(3:4,1:2),H*A(3:4,3:4),H*A(3:4,5:6)])
1 Comment
blockproc is quite slow, and is usually inadvisable.
H = [1,2;3,4];
rng(100);
A = randi(10,400,600);
tic;
R1 = blockproc(A,[2 2],@(B) H*B.data);
toc
tic;
R2=reshape( H*reshape(A,2,[]) , [],width(A));
toc;
Even cellfun would be better:
tic;
Acell=mat2cell(A,ones(200,1)*2,ones(300,1)*2);
R3=cell2mat(cellfun(@(B) H*B ,Acell,'uni',0));
toc
isequal(R1,R2,R3)
Categories
Find more on Matrix Indexing in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!