我在 MATLAB 中有一个矩阵,我需要找到每列的 99% 值。换句话说,99% 的人口具有比它更大的值。MATLAB中有这个函数吗?
问问题
4324 次
3 回答
11
使用 QUANTILE 函数。
Y = quantile(X,P);
其中 X 是一个矩阵,P 是概率的标量或向量。例如,如果 P=0.01,Y 将是每列值的向量,因此 99% 的列值更大。
于 2010-03-05T06:45:21.377 回答
11
最简单的解决方案是按照yuk的建议使用函数QUANTILE。
Y = quantile(X,0.01);
但是,您将需要统计工具箱才能使用函数QUANTILE。可以通过注意QUANTILE调用函数PRCTILE找到不依赖于工具箱的解决方案,该函数本身调用内置函数INTERP1Q来执行主要计算。对于不包含NaN值的二维矩阵的一般情况,您可以使用以下代码计算每列的分位数:
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
这应该会给您与调用QUANTILE相同的结果,而无需任何工具箱。
于 2010-03-05T16:29:31.003 回答
2
如果您没有统计工具箱,总有
y=sort(x);
y(floor(length(y)*0.99))
或者
y(floor(length(y)*0.01))
取决于你的意思。
于 2010-03-05T16:08:01.850 回答