Help me vectorize this code
    6 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    VisLab
 el 7 de Nov. de 2013
  
    
    
    
    
    Editada: Andrei Bobrov
      
      
 el 8 de Nov. de 2013
            for x=1:1:rows
for y=1:1:cols
    RE_p(y,x) = RE(y,x,bestori_map(y,x));
    RO_p(y,x) = RO(y,x,bestori_map(y,x));
end
end
- RE, RO: arrays of size cols*rows*8;
- bestori_map: array of size cols*rows;
what is the best way (and/or fastest) to vectorize this piece of code withouth the need of for cycles ?
Thank you
2 comentarios
Respuesta aceptada
  Andrei Bobrov
      
      
 el 8 de Nov. de 2013
        s = size(RE);
[ii,jj] = ndgrid(1:s(1),1:s(2));
ij = sub2ind(s,ii(:),jj(:),bestori_map(:));
RE_p = reshape(RE(ij),s(1:2));
RO_p = reshape(RO(ij),s(1:2));
Más respuestas (1)
  Walter Roberson
      
      
 el 7 de Nov. de 2013
        
      Editada: Andrei Bobrov
      
      
 el 8 de Nov. de 2013
  
      [X, Y] = ndgrid(1:rows, 1:cols);
X = X(:);
Y = Y(:);
Z = reshape( bestori_map(1:rows,1:cols), [], 1);
linidx = sub2ind(size(RE), X,Y,  Z);
RE_p(1:rows,1:cols ) = reshape(RE(linidx),rows, cols );
linidx = sub2ind(size(RO), X, Y, Z);
RO_p(1:rows,1:cols) = reshape(RO(linidx),rows, cols, );
Note: if RE and RO are the same size then you can re-use linidx instead of re-calculating it.
4 comentarios
Ver también
Categorías
				Más información sobre Software Development Tools en Help Center y File Exchange.
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!