我在MATLAB中有一个矩阵,我需要为每列找到99%的值。换句话说,这个价值使99%的人口拥有比它更大的价值。 MATLAB中是否有一个函数用于此?
答案 0 :(得分:11)
使用QUANTILE功能。
Y = quantile(X,P);
其中X是矩阵,P是标量或概率向量。例如,如果P = 0.01,则Y将是每列的值向量,因此99%的列值更大。
答案 1 :(得分:10)
最简单的解决方案是将函数QUANTILE用作yuk suggested。
Y = quantile(X,0.01);
但是,您需要Statistics Toolbox才能使用QUANTILE功能。可以通过注意QUANTILE调用函数PRCTILE来找到不依赖于工具箱的解决方案,函数INTERP1Q本身调用内置函数NaN来执行主计算。对于不包含QUANTILE值的二维矩阵的一般情况,您可以使用以下代码计算每列的分位数:
P = 0.01; %# Your probability
S = sort(X); %# Sort the columns of your data X
N = size(X,1); %# The number of rows of X
Y = interp1q([0 (0.5:(N-0.5))./N 1]',S([1 1:N N],:),P); %'# Get the quantiles
这样可以提供与调用{{3}}相同的结果,而无需任何工具箱。
答案 2 :(得分:2)
如果您没有统计工具箱,则总是
y=sort(x);
y(floor(length(y)*0.99))
或
y(floor(length(y)*0.01))
取决于你的意思。