How to average certain elements in a matrix using for loop.
4 views (last 30 days)
Show older comments
Hello,
I am trying to operate on a matrix that has the following columns:
M=[x_coordinates y_coordinates ID] I would like to find the average x and y coordinates for same ID, in other words to group all the points that has the same ID. Can you please advice me on how to do it with Matlab.
Best regards, Jack
0 Comments
Accepted Answer
Azzi Abdelmalek
on 3 Mar 2014
A=[ 1 2 10;5 8 10;4 3 20]
c1=A(:,1);
c2=A(:,2);
[ii,jj,kk]=unique(A(:,3));
cc1=[ii accumarray(kk,c1,[],@mean)]
cc2=[ii accumarray(kk,c2,[],@mean)]
2 Comments
Azzi Abdelmalek
on 3 Mar 2014
A=[ 1 2 10;5 8 10;4 3 20]
weight=[10;54;87]
c1=A(:,1);
[ii,jj,kk]=unique(A(:,3));
cc1=[ii accumarray(kk,c1.*weight,[],@mean)]
More Answers (2)
Sean de Wolski
on 3 Mar 2014
doc accumarray
And an example:
%%sample data
n = 50;
id = randi(5,n,1);
x = rand(n,1);
y = rand(n,1);
%%engine
[uid,~,idx] = unique(id); % unique ids and the index of occurrences
mx = accumarray(id,x,[],@mean); % mean of x by id
my = accumarray(id,y,[],@mean); % mean of y by id
results = [uid mx my] % display
0 Comments
See Also
Categories
Find more on Creating and Concatenating Matrices in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!