Need to improve efficiency in this code, which multiplies a 3D matrix by a 2D one
    10 vues (au cours des 30 derniers jours)
  
       Afficher commentaires plus anciens
    
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 commentaires
Réponse acceptée
  Andrei Bobrov
      
      
 le 13 Juil 2015
        
      Modifié(e) : Andrei Bobrov
      
      
 le 13 Juil 2015
  
      W = reshape(W_rsT,size(W_rsT,2),[]).';
q1 = squeeze(q);
w_pre = reshape(W*q1,[num_x, num_y,1,f_N]);
Plus de réponses (0)
Voir également
Catégories
				En savoir plus sur Annotations dans Help Center et File Exchange
			
	Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

