Reemplazar las instancias no recomendadas de hist e histc
Funciones de histograma anteriores (hist
, histc
)
Las versiones anteriores de MATLAB® utilizan las funciones hist
e histc
como el método principal para crear histogramas y calcular los recuentos de bin del histograma. Estas funciones, aunque son adecuadas para algunos fines generales, cuentan con capacidades generales limitadas. No se recomienda el uso de hist
e histc
en nuevo código por estos motivos (entre otros):
Tras utilizar
hist
para crear un histograma, modificar las propiedades del histograma resulta complicado y requiere volver a calcular todo el histograma.El comportamiento predeterminado de
hist
es utilizar 10 bins, lo que no es indicado para muchos conjuntos de datos.La representación de un histograma normalizado requiere de cálculos manuales.
hist
ehistc
no tienen un comportamiento coherente.
Funciones de histograma recomendadas
Las funciones histogram
, histcounts
y discretize
desarrollan drásticamente las capacidades de creación y cálculo de histogramas en MATLAB, a la vez que se sigue fomentando la coherencia y la facilidad de uso. histogram
, histcounts
y discretize
son las funciones recomendadas para la creación y el cálculo de histogramas para nuevo código.
Hay que destacar los siguientes cambios, que se presentan como mejoras de hist
e histc
:
histogram
puede devolver un objeto de histograma. Se puede utilizar el objeto para modificar las propiedades del histograma.histogram
ehistcounts
cuentan con capacidades de combinación y normalización automáticas, con varias opciones frecuentes integradas.histcounts
es la función de cálculo principal parahistogram
. El resultado es que las funciones presentan un comportamiento coherente.discretize
ofrece flexibilidad y opciones adicionales para determinar la colocación del bin de cada elemento.
Diferencias que requieren actualizaciones de código
A pesar de las mejoras mencionadas anteriormente, existen varias diferencias importantes entre las funciones anteriores y las que ahora se recomiendan, que podrían requerir de la actualización del código. La tabla resume las diferencias entre las funciones y ofrece sugerencias para actualizar el código.
Actualizaciones de código para hist
Diferencia | Antiguo comportamiento con hist | Nuevo comportamiento con histogram |
---|---|---|
Matrices de entrada |
A = randn(100,2); hist(A) |
A = randn(100,2); h1 = histogram(A(:,1),10) edges = h1.BinEdges; hold on h2 = histogram(A(:,2),edges) El ejemplo de código anterior utiliza los mismos extremos del bin, pero en determinados casos es mejor definir que la propiedad |
Especificación de bin |
|
Para convertir los centros de bin en extremos para su uso con Nota En los casos en que los centros de bin que se utilizan con histogram(A,'BinLimits',[-3,3],'BinMethod','integers') |
Argumentos de salida |
A = randn(100,1); [N, Centers] = hist(A) |
A = randn(100,1); h = histogram(A); N = h.Values Edges = h.BinEdges Nota Para calcular los recuentos de bin (sin representar un histograma), sustituya |
Número predeterminado de bins |
|
A = randn(100,1); histogram(A) histcounts(A) |
Límites de bin |
| Si no se ha configurado Para reproducir los resultados de A = randi(5,100,1); histogram(A,10,'BinLimits',[min(A) max(A)]) |
Actualizaciones de código para histc
Diferencia | Antiguo comportamiento con histc | Nuevo comportamiento con histcounts |
---|---|---|
Matrices de entrada |
A = randn(100,10); edges = -4:4; N = histc(A,edges) |
A = randn(100,10); edges = -4:4; N = histcounts(A,edges) Utilice un bucle for para calcular recuentos de bin en cada columna. A = randn(100,10); nbins = 10; N = zeros(nbins, size(A,2)); for k = 1:size(A,2) N(:,k) = histcounts(A(:,k),nbins); end Si el rendimiento es un problema debido al gran número de columnas en la matriz, considere seguir utilizando |
Valores incluidos en el último bin |
|
A = 1:4; edges = [1 2 2.5 3] N = histcounts(A) N = histcounts(A,edges) El último bin de N = histcounts(A,'BinMethod','integers'); |
Argumentos de salida |
A = randn(15,1); edges = -4:4; [N,Bin] = histc(A,edges) |
|
Convertir centros de bin en extremos de bin
La función hist
acepta los centros de bin, mientras que la función histogram
acepta los extremos de bin. Si desea actualizar el código para utilizar histogram
, puede que tenga que convertir los centros de bin en extremos de bin para reproducir los resultados logrados con hist
.
Por ejemplo, especifique centros de bin para su uso con hist
. Estos bins tienen un ancho uniforme.
A = [-9 -6 -5 -2 0 1 3 3 4 7]; centers = [-7.5 -2.5 2.5 7.5]; hist(A,centers)
Para convertir los centros de bin en extremos de bin, calcule el punto intermedio entre los valores consecutivos en centers
. Este método reproduce los resultados de hist
para los anchos de bin uniformes y no uniformes.
d = diff(centers)/2; edges = [centers(1)-d(1), centers(1:end-1)+d, centers(end)+d(end)];
La función hist
incluye los valores que se encuentran en el extremo derecho de cada bin (el primer bin incluye los dos extremos), mientras que histogram
incluye los valores que se encuentran en el extremo izquierdo de cada bin (y el último bin incluye los dos extremos). Cambie los extremos de bin mínimamente para obtener los mismos recuentos de bin que hist
.
edges(2:end) = edges(2:end)+eps(edges(2:end))
edges = 1×5
-10.0000 -5.0000 0.0000 5.0000 10.0000
Luego, utilice histogram
con los extremos del bin.
histogram(A,edges)