Main Content

권장되지 않는 hist 및 histc 인스턴스의 대체 방법

이전 히스토그램 함수(hist,histc)

이전 버전의 MATLAB®에서는 기본적으로hist함수나histc함수를 사용하여 히스토그램을 생성하고 히스토그램 Bin 도수를 계산합니다. 이러한 함수는 일부 일반적인 용도로는 적합하지만 전반적으로 기능에 제한이 있습니다. 새 코드에서histhistc를 사용하는 것은 특히 다음과 같은 이유로 권장되지 않습니다.

  • hist를 사용하여 히스토그램을 만든 후에는 히스토그램의 속성을 수정하기가 어려우며, 수정하려면 전체 히스토그램을 다시 계산해야 합니다.

  • hist의 디폴트 동작은 10개의 Bin을 사용하는 것이며, 이는 많은 데이터 세트에 적합하지 않습니다.

  • 정규화된 히스토그램을 플로팅하려면 수동으로 계산해야 합니다.

  • histhistc의 동작이 일관되지 않습니다.

권장되는 히스토그램 함수

histogram,histcounts,discretize함수는 MATLAB에서 히스토그램을 생성하고 계산하는 기능을 크게 향상시키는 동시에 일관성과 사용 편의성도 높습니다.histogram,histcounts,discretize는 히스토그램 생성 및 계산을 위한 함수로, 새 코드에 권장됩니다.

특히 주목할 만한 것은 다음과 같은 변경 내용으로, 이는histhistc에 대한개선 사항입니다.

  • histogram은 histogram 객체를 반환할 수 있습니다. 이 객체를 사용하여 히스토그램의 속성을 수정할 수 있습니다.

  • histogramhistcounts에는 모두 자동 비닝(Binning) 및 정규화 기능이 있으며, 두 함수는 공통적인 여러 내장 옵션을 갖고 있습니다.

  • histcountshistogram에 대한 주 계산 함수입니다. 따라서 이 두 함수는 일관되게 동작합니다.

  • discretize는 각 요소의 Bin 배치를 결정할 수 있는 추가적인 옵션과 유연성을 제공합니다.

코드 업데이트가 필요한 차이점

앞에서 언급한 개선 사항에도 불구하고, 이전 함수와 권장되는 새 함수 간에는 여러 가지 중요한차이점이 있으며, 이로 인해 코드를 업데이트해야 할 수도 있습니다. 다음 표에는 함수 간의 차이점이 요약되어 있으며 코드 업데이트를 위한 제안 사항도 나와 있습니다.

hist의 코드 업데이트

차이점 이전hist의 동작 새로운histogram의 동작

입력 행렬

hist는 입력 행렬의 각 열에 대한 히스토그램을 생성하고 동일한 Figure에 히스토그램을 나란히 플로팅합니다.

A = randn(100,2); hist(A)

histogram은 입력 행렬을 tall형 벡터로 처리하고 단일 히스토그램을 생성합니다. 여러 히스토그램을 플로팅하려면 데이터의 각 열마다 다른 histogram 객체를 생성하십시오.hold on명령을 사용하여 동일한 Figure에 여러 히스토그램을 플로팅할 수 있습니다.

A = randn(100,2); h1 = histogram(A(:,1),10) edges = h1.BinEdges; hold on h2 = histogram(A(:,2),edges)

위의 코드 예제에서는 각 히스토그램에 동일한 Bin 경계값을 사용하지만, 경우에 따라서는 이 대신 각 히스토그램의BinWidth를 동일하게 설정하는 것이 더 좋을 수도 있습니다. 또한 화면 표시를 위해, 각 히스토그램의FaceAlpha속성을 설정하는 것이 도움이 될 수도 있습니다. 이는 겹치는 막대의 투명도에 영향을 줍니다.

Bin 지정

hist는 두 번째 입력값으로 Bin중심값을 받을 수 있습니다.

histogram은 두 번째 입력값으로 Bin경계값을 받을 수 있습니다.

histogram에서 사용할 수 있도록 Bin 중심값을 Bin 경계값으로 변환하려면Bin 중심값을 Bin 경계값으로 변환항목을 참조하십시오.

참고

hist에서 사용하는 Bin 중심값이 정수인 경우(예:hist(A,-3:3))에는,histogram의 새로운 정수용 내장 비닝 방법을 사용하십시오.

histogram(A,'BinLimits',[-3,3],'BinMethod','integers')

출력 인수

hist는 Bin 도수를 출력 인수로 반환하며, 선택적으로 Bin 중심값을 두 번째 출력 인수로 반환할 수 있습니다.

A = randn(100,1); [N, Centers] = hist(A)

histogram은 histogram 객체를 출력 인수로 반환합니다. 이 객체에는 Bin 도수, Bin 경계값 등과 같이 여러 필요한 속성이 포함되어 있습니다. 해당하는 속성값을 변경하여 histogram의 여러 특성을 수정할 수 있습니다. 자세한 내용은histogram항목을 참조하십시오.

A = randn(100,1); h = histogram(A); N = h.Values Edges = h.BinEdges

참고

히스토그램을 플로팅하지 않고 Bin 도수를 계산하려면[N, Centers] = hist(A)[N,edges] = histcounts(A,nbins)로 바꾸십시오.

Bin의 디폴트 개수

hist는 기본적으로 10개의 Bin을 사용합니다.

histogramhistcounts는 모두 기본적으로 자동 비닝(Binning) 알고리즘을 사용합니다. Bin 개수는 입력 데이터의 크기와 범위에 의해 결정됩니다.

A = randn(100,1); histogram(A) histcounts(A)

Bin 제한

hist는 최소 유한 데이터값 및 최대 유한 데이터값을 사용하여 플롯의 첫 번째 막대와 마지막 막대의 하한 경계값과 상한 경계값을 결정합니다.-InfInf는 첫 번째 Bin과 마지막 Bin에 각각 포함됩니다.

BinLimits가 설정되지 않은 경우,histogram은 최소 유한 데이터 값과 최대 유한 데이터 값을 기준으로 하지만 이와 정확히 동일하지는 않은 유리수 Bin 제한을 사용합니다. Bin 경계값 중 하나가Inf또는-Inf를 Bin 경계값으로 명시적으로 지정한 경우가 아니면,histogramInf값을 무시합니다.

유한 데이터 값(Inf값 아님)에 대한hist(A)의 결과를 재현하려면 10개의 Bin을 사용하고BinLimits를 최소 데이터 값 및 최대 데이터 값으로 명시적으로 지정하십시오.

A = randi(5,100,1); histogram(A,10,'BinLimits',[min(A) max(A)])

histc의 코드 업데이트

차이점 이전histc의 동작 새로운histcounts의 동작
입력 행렬

histc는 입력 데이터의 각 열에 대한 Bin 도수를 계산합니다. 크기가m×n인 입력 행렬에 대해histc는 크기가length(edges)×n인, Bin 도수 행렬을 반환합니다.

A = randn(100,10); edges = -4:4; N = histc(A,edges)

histcounts는입력행렬을高형벡터로처리하고전체행렬에대한本도수를계산합니다.

A = randn(100,10); edges = -4:4; N = histcounts(A,edges)

각 열에 대해 Bin 도수를 계산하려면 for 루프를 사용하십시오.

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

행렬의 열 개수가 많아 성능이 문제가 된다면, 각 열에 대한 Bin 도수 계산 시에 계속해서histc를 사용하는 것을 고려해 보십시오.

마지막 Bin에 포함된 값

A(i) == edges(end)인 경우histc는 마지막 Bin에 요소A(i)를 포함시킵니다. 출력값Nlength(edges)개의 요소를 갖는 Bin 도수로 이루어진 벡터입니다. Bin 범위를 벗어난 값은 계산되지 않습니다.

边(end-1) < = (i) < =边缘(结束)인 경우histcounts는 마지막 Bin에 요소A(i)를 포함시킵니다. 즉,histcountshistc의 마지막 두 개 Bin을 하나의 최종 Bin으로 결합합니다. 출력값Nlength(edges)-1개의 요소를 갖는 Bin 도수로 이루어진 벡터입니다. Bin 경계값을 지정하면 Bin 범위를 벗어난 값이 계산되지 않습니다. Bin 경계값을 지정하지 않을 경우histcounts는 모든 데이터를 포함시키는 데 사용할 적절한 Bin 경계값을 자동으로 결정합니다.

A = 1:4; edges = [1 2 2.5 3] N = histcounts(A) N = histcounts(A,edges)

histc의 마지막 Bin은 주로 정수를 계산하는 데 유용합니다.histcounts를 사용하여 정수 계산을 수행하려면,'integers'Bin 방법을 사용하십시오.

N = histcounts(A,'BinMethod','integers');
출력 인수

histc는 Bin 도수를 출력 인수로 반환하며, 선택적으로 Bin 인덱스를 두 번째 출력 인수로 반환할 수 있습니다.

A = randn(15,1); edges = -4:4; [N,Bin] = histc(A,edges)
  • N = histc(A,edges)또는[N,bin] = histc(A,edges)와 같은 Bin 도수 계산에는histcounts를 사용합니다.histcounts함수는 Bin 도수를 출력 인수로 반환하며, 선택적으로 Bin 경계값을 두 번째 출력 인수로 반환하거나 Bin 인덱스를 세 번째 출력 인수로 반환할 수 있습니다.

    A = randn(15,1); [N,Edges,Bin] = histcounts(A)
  • [~,Bin] = histc(A,edges)와 같은 Bin 배치 계산에는discretize를 사용합니다.discretize함수는 각 요소의 Bin 배치를 결정할 수 있는 추가 옵션을 제공합니다.

    A = randn(15,1); edges = -4:4; Bin = discretize(A,edges)

Bin 중심값을 Bin 경계값으로 변환

hist함수는 Bin 중심값을 받는 반면,histogram함수는 Bin 경계값을 받습니다.histogram을 사용하도록 코드를 업데이트하려면 Bin 중심값을 Bin 경계값으로 변환하여hist에서 얻은 결과를 재현해야 할 수 있습니다.

예를 들어,hist에서 사용할 Bin 중심값을 지정합니다. 이러한 Bin은 너비가 균일합니다.

A = [-9 -6 -5 -2 0 1 3 3 4 7]; centers = [-7.5 -2.5 2.5 7.5]; hist(A,centers)

Figure contains an axes object. The axes object contains an object of type patch. This object represents A.

Bin 중심값을 Bin 경계값으로 변환하기 위해서는centers에서 연속 값 사이의 중간점을 계산해야 합니다. 이 방법은 균일하거나 균일하지 않은 Bin 너비 모두에 대해hist의 결과를 재현할 수 있습니다.

d = diff(centers)/2; edges = [centers(1)-d(1), centers(1:end-1)+d, centers(end)+d(end)];

hist함수는 각 Bin의 상한 경계값을 포함하며, 이 경우 첫 번째 Bin에는 두 값이 모두 포함됩니다. 반면histogram은 각 Bin의 하한 경계값을 포함하며, 이 경우 마지막 Bin에 두 값이 모두 포함됩니다. Bin 경계값을 약간 이동시키면hist와 동일한 Bin 도수를 얻을 수 있습니다.

edges(2:end) = edges(2:end)+eps(edges(2:end))
edges =1×5-10.0000 -5.0000 0.0000 5.0000 10.0000

이제histogram에 Bin 경계값을 사용합니다.

histogram(A,edges)

Figure contains an axes object. The axes object contains an object of type histogram.