Finding unique rows in a matrix and summing their weights faster
2 次查看(过去 30 天)
显示 更早的评论
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?
0 个评论
采纳的回答
Andrei Bobrov
2013-6-24
编辑:Andrei Bobrov
2013-6-24
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);
0 个评论
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrices and Arrays 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!