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。請注意,weights 的
dtype
也會成為回傳的累加器 (hist) 的dtype
,因此它必須夠大以容納累積值。- densitybool,選用
如果
False
,結果將包含每個 bin 中的樣本數。如果True
,結果是 bin 處的機率密度函數值,經過正規化,使得範圍上的積分為 1。請注意,除非選擇單位寬度的 bin,否則直方圖值的總和不會等於 1;它不是機率質量函數。
- 回傳值:
- histarray
直方圖的值。請參閱 density 和 weights 以了解可能的語意描述。如果給定 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()