Hi,
I have two 2D matrix u and v, and a 3D array B. I want to perform the following calculations, for example
u=rand(200,300);
v=rand(200,300);
B=rand(60,60,300)
c=0;
for j=1:300
u1=0;
v1=0;
for k=1:200
u1=u1+u(k,j)*B(:,:,k);
v1=v1+v(k,j)*B(:,:,k);
end
c=c+u1.*v1;
end
Due to two for loops, it is very slowly for the larger matrix u, v and B. Are there some good methods to compute c without using any for loop?.
Thanks a lot.

댓글 수: 1

Matt J
Matt J 2021년 10월 23일
Are you sure the size of B shouldn't be 60x60x200? If not, your code example ignores the final 100 pages of B.

댓글을 달려면 로그인하십시오.

 채택된 답변

Matt J
Matt J 2021년 10월 23일
편집: Matt J 2021년 10월 23일

0 개 추천

[m,n,p]=size(B);
Br=reshape(B,[],p);
Br=Br(:,1:200); %might not be necessary
U1=Br*u;
V1=Br*v;
c=reshape( sum(U1.*V1,2) , m,n);

댓글 수: 1

Qiu Xu
Qiu Xu 2021년 10월 24일
Thanks, I have make a mistake that the size of B should be 60x60x200. Your method is very good.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

질문:

2021년 10월 23일

댓글:

2021년 10월 24일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by