Effacer les filtres
Effacer les filtres

Finding unique rows in a matrix and summing their weights faster

1 vue (au cours des 30 derniers jours)
Kristofer Kusano
Kristofer Kusano le 24 Juin 2013
I am performing the following:
% a matrix where rows are observations
A = [1 2;
4 6;
1 2;
9 2;
4 2;
6 9];
% each row has a weight
W = (1:size(A, 1))';
% find unique rows
[uA, ~, icA] = unique(A, 'rows')
>>
uA =
1 2
4 2
4 6
6 9
9 2
icA =
1
3
1
5
2
4
% what is the combined weight for each unique row?
wA = zeros(size(uA, 1), 1);
for i = 1:length(uA)
wA(i) = sum(W(icA == i));
end
% check it works
wA
>>
wA =
4
5
2
6
4
assert(sum(W) == sum(wA), 'sum(W) ~= sum(wA)')
The code works, but the for loop is very slow for a large number of rows. Does anyone know a faster way to do this?

Réponse acceptée

Andrei Bobrov
Andrei Bobrov le 24 Juin 2013
Modifié(e) : Andrei Bobrov le 24 Juin 2013
A = [1 2
4 6
1 2
9 2
4 2
6 9];
[aa,cc,cc] = unique(A,'rows');
W = (1:size(A, 1))';
wA = accumarray(cc,W);

Plus de réponses (0)

Catégories

En savoir plus sur Creating and Concatenating Matrices dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by