Using a vector of indices to add values to a matrix
3 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Christopher
am 2 Mär. 2014
Beantwortet: Jos (10584)
am 5 Mär. 2014
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 Kommentare
Akzeptierte Antwort
Paul
am 2 Mär. 2014
Bearbeitet: Paul
am 2 Mär. 2014
xs = N(:,1);
ys = N(:,2);
val = N(:,3);
siz = size(P);
ind = sub2ind(siz,ys,xs);
P(ind) = P(ind)+val.';
2 Kommentare
Jos (10584)
am 2 Mär. 2014
Note that the addition will not work properly for duplicates of (xs,ys) / ind
Weitere Antworten (1)
Jos (10584)
am 5 Mär. 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 Kommentare
Siehe auch
Kategorien
Mehr zu Logical 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!