Ordenar elementos en contenedores en MATLAB
Pregunta
Si tengo un conjunto de datos de Y y un conjunto de bandejas con centro en X, que puede utilizar el comando HIST para encontrar cuántos de cada Y son en cada bandeja.
N = hist(Y,X)
Lo que me gustaría saber es si hay una función integrada que me puede decir qué bin cada Y entra en, por lo
[N,I] = histMod(Y,X)
significaría que Y (I == 1) devolvería toda la Y en bin 1, etc.
Yo sé cómo escribir esta función, por lo que sólo estoy preguntando si ya hay una incorporado en MATLAB que hace esto.
Solución
La función relacionada histc
hace esto, pero se requiere para definir los bordes del compartimiento en vez de centros de basura.
Y = rand(1, 10);
edges = .1:.1:1;
[N, I] = histc(Y, edges);
El cálculo de los bordes dados los bincenters es también muy fácil. En un un trazador de líneas:
N = hist(Y, X);
se convierte
[Nc, Ic] = histc(Y, [-inf X(1:end-1) + diff(X)/2, inf]);
con Nc == N, más uno bin vacío adicional en el extremo (desde Asumo ningún valor en Y coincide inf).
Ver doc histc
.
Otros consejos
Si uno está satisfecho con el uso de bordes bin en lugar de los compartimientos, el
[N,bin] = histc(y,binedges)
funciona. Aaargh, Matlab sus definiciones de funciones son tan nonintuitive