How do I average rows which contain the same first to elements?
9 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
I'm stuck on this problem for a while. I want to obtain a matrix which is averaged for the rows which contain the same first two elements. I don't want to clear the rows which are not equal for the first two elements. When I have a matrix A:
A=[1 1 1 1 1
1 2 3 4 5
1 2 4 4 4
1 2 3 3 3
2 2 2 2 2
2 2 3 3 3]
I want the outcome to be:
A=[1 1 1 1 1
1 2 3.33 3.67 4
2 2 2.5 2.5 2.5]
I hope someone could help me on this.
0 Commenti
Risposta accettata
Ahmed
il 10 Giu 2013
This solution is not very elegant, but should work. There is room for improvement, though.
uA = unique(A(:,1:2),'rows');
A = [uA cell2mat(cellfun(@(x)...
mean(A(all(bsxfun(@eq,A(:,1:2),x),2),3:end),1), ...
num2cell(uA,2),...
'UniformOutput',false)) ]
Più risposte (1)
Andrei Bobrov
il 10 Giu 2013
Modificato: Andrei Bobrov
il 10 Giu 2013
[~,~,c] = unique(A(:,1:2),'rows');
out = accumarray([repmat(c,size(A,2),1) kron((1:size(A,2))',...
ones(size(A,1),1))],A(:),[],@mean);
or
[c c c] = unique(A(:,1:2),'rows');
[ii,jj] = ndgrid(c,1:size(A,2));
out = accumarray([ii(:) jj(:)],A(:),[],@mean);
0 Commenti
Vedere anche
Categorie
Scopri di più su Creating and Concatenating Matrices in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!