multiply a matrix into every block matrix in a big matrix
조회 수: 4 (최근 30일)
이전 댓글 표시
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
채택된 답변
Matt J
2024년 11월 27일
편집: Matt J
2024년 11월 27일
You can download this package,
Example:
Hc=[1,2;3,4];
A=kron(ones(3),eye(2)); %2x2 blocks Aij
dims=[2,2]; %block dims
tmp=Hc*blkColonTranspose(A,dims);
result=blkReshape(tmp,dims,blkSize(A,dims))
result =
1 2 1 2 1 2
3 4 3 4 3 4
1 2 1 2 1 2
3 4 3 4 3 4
1 2 1 2 1 2
3 4 3 4 3 4
추가 답변 (2개)
Paul
2024년 11월 27일
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
Matt J
2024년 11월 27일
편집: Matt J
2024년 11월 27일
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)
참고 항목
카테고리
Help Center 및 File Exchange에서 Matrix Indexing에 대해 자세히 알아보기
제품
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!