Using a vector of indices to add values to a matrix
    6 vues (au cours des 30 derniers jours)
  
       Afficher commentaires plus anciens
    
I am trying to vectorize a piece of code which has this form:
for m = 1:1:numel(N)
    y       =  N(m,1);
    x       =  N(m,2);
    val     =  N(m,3);
    P(y,x)  =  P(y,x)+val;
end
So, there is the matrix of column vectors N which hold coordinate information and a value. Using the coordinates the corresponding values are added to the matrix P.
How can this be done efficiently? Thanks.
0 commentaires
Réponse acceptée
  Paul
      
 le 2 Mar 2014
        
      Modifié(e) : Paul
      
 le 2 Mar 2014
  
      xs = N(:,1);
ys = N(:,2);
val = N(:,3);
siz = size(P);
ind = sub2ind(siz,ys,xs);
P(ind) = P(ind)+val.';
2 commentaires
  Jos (10584)
      
      
 le 2 Mar 2014
				Note that the addition will not work properly for duplicates of (xs,ys) / ind
Plus de réponses (1)
  Jos (10584)
      
      
 le 5 Mar 2014
        ACCUMARRAY is, by far, the easiest approach:
N = [1 2 7 ; 1 2 4 ; 2 3 5 ; 2 1 6]
P = accumarray(N(:,1:2),N(:,3))
0 commentaires
Voir également
Catégories
				En savoir plus sur Resizing and Reshaping Matrices 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!


