IT story

numpy.histogram ()은 어떻게 작동합니까?

hot-time 2020. 8. 3. 17:35
반응형

numpy.histogram ()은 어떻게 작동합니까?


numpy를 읽는 동안 함수가 발생했습니다 numpy.histogram().

그것이 무엇이며 어떻게 작동합니까? 문서에서 그들은 쓰레기통 을 언급합니다 : 그들은 무엇입니까?

일부 인터넷 검색은 일반적으로 히스토그램정의로 이어졌습니다 . 나는 그것을 얻는다. 그러나 불행히도이 지식을 문서에 제공된 예제와 연결할 수 없습니다.


구간은 X 축을 따라 막대 그래프의 단일 막대의 너비를 나타내는 범위입니다. 이것을 간격이라고 부를 수도 있습니다. (Wikipedia는 그것들을 더 공식적으로 "분리 된 범주"로 정의합니다.)

Numpy histogram함수는 히스토그램을 그리지는 않지만 각 빈에 포함되는 입력 데이터의 발생을 계산하여 각 막대의 영역 (폭이 같은 너비가 아닌 경우 반드시 높이는 아님)을 결정합니다.

이 예에서 :

 np.histogram([1, 2, 1], bins=[0, 1, 2, 3])

0에서 1 (1 제외), 1에서 2 (2 제외) 및 2에서 3 (3 포함) 범위의 값에 대해 3 개의 빈이 있습니다. [0, 1, 2, 3]이 예제에서 구분 기호 ( ) 목록을 제공하여 Numpy가 이러한 빈을 정의하는 방식 은 결과에서 빈을 리턴하지만 입력에서 빈을 지정하지 않은 경우 입력에서 자동으로 선택할 수 있기 때문입니다. 경우 bins=5예를 들어, 최소한의 입력 값과 최대 입력 값과 동일한 폭 확산 5 빈을 사용할 것이다.

입력 값은 1, 2 및 1입니다. 따라서 빈 "1 ~ 2"에는 두 번의 발생 (두 1값)이 포함되고 빈 "2 ~ 3"에는 한 번의 발생 ( 2)이 포함됩니다. 이 결과는 반환 된 튜플의 첫 번째 항목에 array([0, 2, 1])있습니다.

여기에있는 저장소의 너비는 동일하므로 각 막대의 높이에 대해 발생 횟수를 사용할 수 있습니다. 그려지면 다음과 같은 결과가 나타납니다.

  • X 축에서 범위 / 빈 [0,1]의 높이가 0 인 막대
  • 범위 / 빈 [1,2]에 대한 높이 2의 막대
  • 범위 / 빈에 대한 높이 1의 막대 [2,3].

Matplotlib를 사용하여 직접 플롯 할 수 있습니다 ( hist함수는 빈과 값을 반환합니다).

>>> import matplotlib.pyplot as plt
>>> plt.hist([1, 2, 1], bins=[0, 1, 2, 3])
(array([0, 2, 1]), array([0, 1, 2, 3]), <a list of 3 Patch objects>)
>>> plt.show()

여기에 이미지 설명을 입력하십시오


import numpy as np    
hist, bin_edges = np.histogram([1, 1, 2, 2, 2, 2, 3], bins = range(5))

아래 hist는 빈 # 0에 0 개 항목, 빈 # 1에 2 개, 빈 # 3에 4 개, 빈 # 4에 1 개 항목이 있음을 나타냅니다.

print(hist)
# array([0, 2, 4, 1])   

bin_edges 빈 # 0이 간격 [0,1)이고 빈 # 1이 [1,2), ..., 빈 # 3이 [3,4)임을 나타냅니다.

print (bin_edges)
# array([0, 1, 2, 3, 4]))  

위의 코드를 사용하여 입력을 변경하고 np.histogram작동 방식을 확인하십시오.


그러나 그림은 천 단어의 가치가 있습니다.

import matplotlib.pyplot as plt
plt.bar(bin_edges[:-1], hist, width = 1)
plt.xlim(min(bin_edges), max(bin_edges))
plt.show()   

여기에 이미지 설명을 입력하십시오


또 다른 유용한 작업 numpy.histogram은 출력을 선 그래프에서 x 및 y 좌표로 플롯하는 것입니다. 예를 들면 다음과 같습니다.

arr = np.random.randint(1, 51, 500)
y, x = np.histogram(arr, bins=np.arange(51))
fig, ax = plt.subplots()
ax.plot(x[:-1], y)
fig.show()

여기에 이미지 설명을 입력하십시오

이것은 어디서나 막대없이 더 높은 수준의 세분성을 원하는 히스토그램을 시각화하는 유용한 방법이 될 수 있습니다. 극단적 인 픽셀 값을 식별하기위한 이미지 히스토그램에 매우 유용합니다.

참고 URL : https://stackoverflow.com/questions/9141732/how-does-numpy-histogram-work

반응형