Frage

Ich habe eine Matrix in MATLAB und ich brauche den 99% Wert für jede Spalte zu finden. Mit anderen Worten, der Wert so, dass 99% der Bevölkerung einen größeren Wert als es. Gibt es eine Funktion in MATLAB für das?

War es hilfreich?

Lösung

Mit Quantilsfunktion.

Y = quantile(X,P);

, wobei X eine Matrix ist und P Skalar oder Vektor von Wahrscheinlichkeiten. Wenn beispielsweise P = 0,01, wird die Y-Vektor von Werten für jeden Spalt sein, so dass 99% der Spaltenwerte größer ist.

Andere Tipps

Die einfachste Lösung ist die Verwendung der Funktion Quantils als < a href = "https://stackoverflow.com/questions/2384977/finding-99-coverage-in-matlab/2385024#2385024"> igitt vorgeschlagen.

Y = quantile(X,0.01);

Allerdings müssen Sie die Statistics Toolbox die Funktion verwenden Quantils . Eine Lösung, die nicht abhängig von Werkzeugkästen ist, kann mit der Feststellung, dass Quantils ruft die Funktion PRCTILE , die sich die Funktion Built-in ruft INTERP1Q die primäre Berechnung zu tun. Für den allgemeinen Fall einer 2-D-Matrix, die keine NaN Werten Sie die Quantile jeden Spalt mit dem folgenden Code berechnen können:

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

Dies sollte man die gleichen Ergebnisse liefern wie der Aufruf von Quantils , ohne Werkzeugkästen zu benötigen.

Wenn Sie nicht über die Statistics Toolbox haben, gibt es immer

y=sort(x);
y(floor(length(y)*0.99))

oder

y(floor(length(y)*0.01))

je nachdem, was Sie gemeint.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top