У меня есть матрица в MATLAB, и я должен найти 99%-е значение для каждого столбца. Другими словами, значение, таким образом, что у 99% населения есть большее значение, чем он. Существует ли функция в MATLAB для этого?
Используйте функцию QUANTILE.
Y = quantile(X,P);
где X - матрица, а P - скаляр или вектор вероятностей. Например, если P=0.01, то Y будет вектором значений для каждого столбца, так что 99% значений столбцов больше.
Самым простым решением является использование функции КВАНТИЛЬ , как Юк .
Y = quantile(X,0.01);
Однако вам потребуется Панель инструментов статистики , чтобы использовать функцию КВАНТИЛЬ . Решение, которое не зависит от наборов инструментов, можно найти, отметив, что 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 , без необходимости в каких-либо ящиках для инструментов.
Если у вас нет Statistics Toolbox, всегда есть
y=sort(x);
y(floor(length(y)*0.99))
или
y(floor(length(y)*0.01))
в зависимости от того, что вы имели в виду.