numpy를 읽는 동안 함수를 만났습니다 numpy.histogram()
.
그것은 무엇이며 어떻게 작동합니까? 문서에서 그들은 쓰레기통 을 언급합니다 : 그들은 무엇입니까?
인터넷 검색을 통해 일반적으로 히스토그램을 정의하게되었습니다 . 알겠습니다. 그러나 불행히도이 지식을 문서에 제공된 예제에 연결할 수 없습니다.
numpy를 읽는 동안 함수를 만났습니다 numpy.histogram()
.
그것은 무엇이며 어떻게 작동합니까? 문서에서 그들은 쓰레기통 을 언급합니다 : 그들은 무엇입니까?
인터넷 검색을 통해 일반적으로 히스토그램을 정의하게되었습니다 . 알겠습니다. 그러나 불행히도이 지식을 문서에 제공된 예제에 연결할 수 없습니다.
답변:
빈은 X 축을 따라 히스토그램의 단일 막대 너비를 나타내는 범위입니다. 이것을 간격이라고 부를 수도 있습니다. (위키피디아는 공식적으로 "분리 된 범주"로 정의합니다.)
Numpy histogram
함수는 히스토그램을 그리지 않지만 각 빈에 속하는 입력 데이터의 발생을 계산하여 차례로 각 막대의 영역 (빈이 같지 않은 경우 높이가 아님)을 결정합니다.
이 예에서 :
np.histogram([1, 2, 1], bins=[0, 1, 2, 3])
0에서 1 (1 제외), 1에서 2 (2 제외) 및 2에서 3 (3 포함) 범위의 값에 대해 각각 3 개의 빈이 있습니다. Numpy는 [0, 1, 2, 3]
이 예에서 구분 기호 ( ) 목록을 제공하여 이러한 빈을 정의하는 방식 이지만, 지정되지 않은 경우 입력에서 자동으로 선택할 수 있기 때문에 결과에 빈을 반환하기도합니다. 경우 bins=5
예를 들어, 최소한의 입력 값과 최대 입력 값과 동일한 폭 확산 5 빈을 사용할 것이다.
입력 값은 1, 2 및 1입니다. 따라서 bin "1 to 2"에는 두 개의 발생 (두 1
값)이 포함되고 bin "2 to 3"에는 하나의 발생 (the 2
)이 포함됩니다. 이러한 결과는 반환 된 튜플의 첫 번째 항목에 array([0, 2, 1])
있습니다.
여기에있는 빈은 너비가 같기 때문에 각 막대의 높이에 대해 발생 횟수를 사용할 수 있습니다. 그릴 때 다음을 갖게됩니다.
Matplotlib를 사용하여 직접 플로팅 할 수 있습니다 (해당 hist
함수는 bin과 값도 반환합니다).
>>> 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()
bins
값을 배열의 최대 값 으로 변경 합니다.
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()
plt.bar(bin_edges[:-1], hist, width=1)
그리고 plt.xlim(min(bin_edges), max(bin_edges))
막대가 예상 너비에 맞도록 만들기 위해 (그렇지 않으면 사이에 값이없는 더 작은 빈이있을 수 있습니다).
할 수있는 또 다른 유용한 일은 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()
이는 모든 곳에 막대가없는 더 높은 수준의 세분성을 원하는 히스토그램을 시각화하는 유용한 방법이 될 수 있습니다. 극단적 인 픽셀 값을 식별하기위한 이미지 히스토그램에서 매우 유용합니다.