- If you take your data and do [F,X] = ecdf(A) then this will compute the empirical distribution of A.
- You then just have to match the values in A to those in X which you can do using ismember like this [~,loc] = ismember(X,X2)
- Finally, your quantiles of the values in A will be f(loc)
- You can then sort them into deciles, or whatever you want at that point by rounding to the appropriate value.
Matlab - Sort into deciles each column
14 次查看(过去 30 天)
显示 更早的评论
Suppose I have a matrix A [m x 1], where m is not necessarily even. I to create a matrix B also [m x 1] which tells me the decile of the elements in A (i.e. matrix B has numbers from 1 to 10).
I know I can use the function sort(A) to get the position of the elements in A and from there I can manually get deciles. Is there another way of doing it?
I think one possibility would be B = ceil(10 * tiedrank(A) / length(A) . What do you think? Are there any issues with this?
Also, more generally, if I have a matrix A [m x n] and I want to create a matrix B also [m x n], in which each column of B should have the decile of the corresponding column in A , is there a way of doing it without a for loop through the columns?
Hope the problem at hand is clear. So far I have been doing it using the sort function and then manually assigning the deciles, but it is very inefficient.
Thank you
0 个评论
采纳的回答
jgg
2015-12-4
I think a way to do this is to use the ecdf command (<http://www.mathworks.com/help/stats/ecdf.html>)
I also found this code http://www.mathworks.com/matlabcentral/fileexchange/41131-inverse-percentiles-of-a-sample which might be helpful.
0 个评论
更多回答(1 个)
René Wijnen
2021-7-30
编辑:René Wijnen
2021-7-30
I would use the following to split a vector X into deciles:
X_dec = discretize(X,quantile(X,[0:10]/10))
Works as well for each column of an array X
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Logical 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!