Re: [問題] 矩陣相乘,如何簡化
想法大致如下,請自行驗證修改
[已知]
[r,c,n]=size(A); % A陣列大小:r*c*n
[c,p]=size(B); % B陣列大小: c*p
欲求C,陣列大小:r*p*n
其中C(:,:,i)= A(:,:,i)*B;
[想法]
1. 將A重新排列成 (r*n) *c之二維矩陣
2. 矩陣相成一次運算 [(r*n) *c] * [c*p]==> [(r*n) *p]
3. 重新排列結果 [(r*n) *p]==>[p *(r*n)]==>[p *r *n]==> [ r *p *n]
[實作]
A= permute(A,[1 3 2]);
A= reshape(A,[r*n,c]);
result= A*B; %
result= reshape(result',[p r n]);
result= perumte(result,[2 1 3]);
※ 引述《youbet (1217(五)化學之夜)》之銘言:
: ※ 引述《reek771 (hi~~~)》之銘言:
: : for i=1:N
: : C(:,:,i) = A(:,:,i)*B;
: : end
: : 可以不用迴圈表示嗎?
: : 想好久都想不出來,
: : 謝謝
: 設 A, B, C 的第一、二個 dimension (m) 一樣 (B 為方陣)
: [m,null,N]=size(A);
: [temp,ind]=meshgrid(1:m);
: ind=repmat(ind+(temp-1)*N*m,1,N)+reshape(repmat(0:N-1,m^2,1),m,N*m)*(N*m+1)*m;
: AA=sparse(N*m,N*m);
: AA(ind(:))=A(:);
: D=repmat(B,1,N);
: BB=sparse(N*m,N*m);
: BB(ind(:))=D(:);
: CC=AA*BB;
: C=zeros(m,m,N);
: C(:)=CC(ind(:));
: C=reshape(full(C),m,m,N);
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 210.64.84.37
推
04/15 22:12, , 1F
04/15 22:12, 1F
推
04/16 04:16, , 2F
04/16 04:16, 2F
推
04/16 07:11, , 3F
04/16 07:11, 3F
推
04/16 11:47, , 4F
04/16 11:47, 4F
推
04/16 18:54, , 5F
04/16 18:54, 5F
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):
MATLAB 近期熱門文章
PTT數位生活區 即時熱門文章