# Need to improve efficiency in this code, which multiplies a 3D matrix by a 2D one

조회 수: 1 (최근 30일)
Tom 2015년 7월 13일
댓글: Tom 2015년 7월 16일
Hi, I have this code, which uses for loops and multiplies a 3D matrix with a 2D one. It works, but I need f_N to be 3200, and once f_N is that high, it is just too big a calculation for my computer to do. The weird thing is, I have run this code successfully about 10 months ago - I know this because I have a plot generated from it. But I must have changed something maybe.
Anyway, here's the code:
clear all;
num_x = 275;
num_y = 275;
f_N = 100;
W_rsTpre = rand(25,num_x,num_y);
W_rsT(1,:,:,:) = W_rsTpre;
q_pre = rand(25,f_N);
q(:,1,:) = q_pre;
w_pre = zeros(num_x,num_y,1,f_N); % preallocate
for xx = 1:num_x
for yy = 1:num_y
for ff = 1:f_N
w_pre(xx,yy,1,ff) = W_rsT(1,:,xx,yy)*q(:,1,ff);
end
end
end
w = squeeze(w_pre);
Thanks

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

### 채택된 답변

Andrei Bobrov 2015년 7월 13일
편집: Andrei Bobrov 2015년 7월 13일
W = reshape(W_rsT,size(W_rsT,2),[]).';
q1 = squeeze(q);
w_pre = reshape(W*q1,[num_x, num_y,1,f_N]);
##### 댓글 수: 1이전 댓글 -1개 표시이전 댓글 -1개 숨기기
Tom 2015년 7월 16일
Thank you. Strangely, when I used iequal to see if the two results matched, they did not. But when I plotted them both, they seemed to sit on top of one another - so they must have been pretty much the same.
Many thanks

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

### 카테고리

Help CenterFile Exchange에서 Sparse Matrices에 대해 자세히 알아보기

### Community Treasure Hunt

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

Start Hunting!

Translated by