numpy.histogram#

numpy.histogram(a, bins=10, range=None, density=None, weights=None)[原始碼]#

計算資料集的直方圖。

參數:
aarray_like

輸入資料。直方圖是針對展平後的陣列計算。

binsint 或 純量序列或 str,選用

如果 bins 是 int,則定義給定範圍內等寬 bin 的數量(預設為 10)。如果 bins 是序列,則定義 bin 邊緣的單調遞增陣列,包含最右邊的邊緣,允許非均勻的 bin 寬度。

如果 bins 是字串,則定義用於計算最佳 bin 寬度的方法,如 histogram_bin_edges 所定義。

range(float, float),選用

bin 的下限和上限範圍。如果未提供,範圍預設為 (a.min(), a.max())。範圍外的數值會被忽略。範圍的第一個元素必須小於或等於第二個元素。range 也會影響自動 bin 計算。雖然 bin 寬度是根據 range 內的實際資料計算為最佳值,但 bin 計數將填滿整個範圍,包括不包含資料的部分。

weightsarray_like,選用

權重陣列,形狀與 a 相同。a 中的每個數值僅貢獻其相關權重到 bin 計數(而不是 1)。如果 density 為 True,則權重會被正規化,使密度在範圍上的積分保持為 1。請注意,weightsdtype 也會成為回傳的累加器 (hist) 的 dtype,因此它必須夠大以容納累積值。

densitybool,選用

如果 False,結果將包含每個 bin 中的樣本數。如果 True,結果是 bin 處的機率密度函數值,經過正規化,使得範圍上的積分為 1。請注意,除非選擇單位寬度的 bin,否則直方圖值的總和不會等於 1;它不是機率質量函數。

回傳值:
histarray

直方圖的值。請參閱 densityweights 以了解可能的語意描述。如果給定 weights,則 hist.dtype 將取自 weights

bin_edgesdtype 為 float 的陣列

回傳 bin 邊緣 (length(hist)+1)

註解

除了最後一個(最右邊的)bin 之外,所有 bin 都是半開區間。換句話說,如果 bins

[1, 2, 3, 4]

則第一個 bin 是 [1, 2) (包含 1,但不包含 2),第二個是 [2, 3)。但是,最後一個 bin 是 [3, 4]包含 4。

範例

>>> import numpy as np
>>> np.histogram([1, 2, 1], bins=[0, 1, 2, 3])
(array([0, 2, 1]), array([0, 1, 2, 3]))
>>> np.histogram(np.arange(4), bins=np.arange(5), density=True)
(array([0.25, 0.25, 0.25, 0.25]), array([0, 1, 2, 3, 4]))
>>> np.histogram([[1, 2, 1], [1, 0, 1]], bins=[0,1,2,3])
(array([1, 4, 1]), array([0, 1, 2, 3]))
>>> a = np.arange(5)
>>> hist, bin_edges = np.histogram(a, density=True)
>>> hist
array([0.5, 0. , 0.5, 0. , 0. , 0.5, 0. , 0.5, 0. , 0.5])
>>> hist.sum()
2.4999999999999996
>>> np.sum(hist * np.diff(bin_edges))
1.0

自動 Bin 選擇方法範例,使用 2 個峰值的隨機資料,共 2000 個點。

import matplotlib.pyplot as plt
import numpy as np

rng = np.random.RandomState(10)  # deterministic random data
a = np.hstack((rng.normal(size=1000),
               rng.normal(loc=5, scale=2, size=1000)))
plt.hist(a, bins='auto')  # arguments are passed to np.histogram
plt.title("Histogram with 'auto' bins")
plt.show()
../../_images/numpy-histogram-1.png