Need to improve efficiency in this code, which multiplies a 3D matrix by a 2D one
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
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
0 Kommentare
Akzeptierte Antwort
Andrei Bobrov
am 13 Jul. 2015
Bearbeitet: Andrei Bobrov
am 13 Jul. 2015
W = reshape(W_rsT,size(W_rsT,2),[]).';
q1 = squeeze(q);
w_pre = reshape(W*q1,[num_x, num_y,1,f_N]);
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Sparse Matrices finden Sie in Help Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!