Tri des éléments dans des bacs à Matlab
Question
Si j'ai un ensemble de données Y et un ensemble de bacs centrés sur X, je peux utiliser la commande HIST pour trouver combien de chaque Y sont dans chaque bac.
N = hist(Y,X)
Ce que je voudrais savoir est s'il y a une fonction intégrée qui peut me dire quel bin chaque Y va dans, donc
[N,I] = histMod(Y,X)
signifie que Y (I == 1) retournera tous les Y dans le bac 1, etc.
Je sais comment écrire cette fonction, donc je ne demandais s'il y a déjà intégré dans MATLAB qui fait cela.
La solution
La fonction liée histc
fait cela, mais il vous oblige à définir les bords de bin au lieu des centres de bin.
Y = rand(1, 10);
edges = .1:.1:1;
[N, I] = histc(Y, edges);
Le calcul des bords étant donné les bincenters est facile aussi. Dans une seule ligne:
N = hist(Y, X);
devient
[Nc, Ic] = histc(Y, [-inf X(1:end-1) + diff(X)/2, inf]);
avec Nc == N, plus un bac supplémentaire vide à la fin (puisque je suppose que pas de valeur en Y correspond inf).
Voir doc histc
.
Autres conseils
Si l'on est satisfait à l'utilisation des bords de poubelle au lieu de bacs,
[N,bin] = histc(y,binedges)
fonctionne. Aaargh, Matlab vos définitions de fonctions sont si non intuitive