Calculate median with accumarray
12 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
franky
le 4 Oct 2018
Réponse apportée : Bruno Luong
le 4 Oct 2018
Hello,
I have an array with two columns. The rows are sorted by the values of the first column and then indexed by the use of histc. Now I want to calculate the median of every interval for the columns. Procedure for the first column is clear with accumarray but before calculating the median for the second column I have to sort every interval, right? How can I do this?
groupMedian = accumarray(ID,Measurement(:,2),[],@median);
0 commentaires
Réponse acceptée
Walter Roberson
le 4 Oct 2018
Modifié(e) : Walter Roberson
le 4 Oct 2018
No, you do not need to sort each interval. Just make sure that each interval is given a distinct ID vector row.
[unique_col1, ~, ID] = unique(Measurement(:,1));
group_median = accumarray(ID, Measurement(:,2), [], @median);
output = [unique_col1, group_median];
No sorting by column 1 beforehand is needed (unless you happen to need that output for a different purpose.)
0 commentaires
Plus de réponses (2)
Bruno Luong
le 4 Oct 2018
Internally the median command "sort" input data and take a middle element of the sorted array (or average of two left and right for even length array). Some other technique exists, such as partial-sorting which has better complexity than SORT (I don't think MATLAB use it however the last time I check it)
You, as user don't have to sort it when calling median, that's how the function like this exists at the first hand.
0 commentaires
franky
le 4 Oct 2018
1 commentaire
Walter Roberson
le 4 Oct 2018
It is not required to sort the values before calling median()
data = randi(20, 1, 1000);
>> median(data)
ans =
11
>> median(data(randperm(length(data))))
ans =
11
Voir également
Catégories
En savoir plus sur Shifting and Sorting 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!