Python NumPy numpy.histogram() 函式

Minahil Noor 2023年1月30日
  1. numpy.histogram() 語法
  2. 示例程式碼:numpy.histogram()
  3. 示例程式碼:numpy.histogram() 指定 bins 的數量和大小
  4. 示例程式碼:numpy.histogram() 使用 density 引數
  5. 示例程式碼:numpy.histogram() 繪製直方圖
Python NumPy numpy.histogram() 函式

Python NumPy numpy.histogram() 函式生成直方圖的值。它不繪製直方圖,但它計算其值。我們傳遞一個陣列作為引數。這個函式計算出它的直方圖,並返回一個儲存了直方圖值的陣列。我們可以說,它返回的是直方圖的數值表示。

numpy.histogram() 語法

numpy.histogram(a, bins=10, range=None, normed=None, weights=None, density=None)

引數

a 它是一個類似陣列的結構。它代表計算直方圖的輸入資料。
bins 它是一個整數、字串或一個標量序列。它代表 bin 的數量。一個 bin 就像一個範圍,例如,0-5,6-10 等。如果 bin 是一個整數,那麼它表示等間距的 bin 的數量。如果它是一個字串,那麼它代表計算 bin 空間的方法。如果它是一個序列,那麼它代表不同寬度的 bin。
range 它是以浮點數給出的範圍。它代表了 bin 的上限和下限。如果沒有給定範圍,那麼 [a.min(), a.max()] 就是範圍。
normed 它是一個布林值引數。它的功能類似於 density 引數,但如果各倉的間距不相等,就會產生不正確的結果。
weights 它是一個類似於陣列的結構。其大小與 a 相同。如果 densityTrue,那麼權重將被歸一化。
density 它是一個布林值引數。如果它的值為 True,那麼它計算的是概率,而不是計算頻率。

返回值

它返回兩個陣列:histbin_edges。陣列 hist 顯示直方圖的值,bin_edges 顯示 bin 邊緣。bin_edges 的大小總是 1+(hist 的大小),即 length(hist)+1

示例程式碼:numpy.histogram()

引數 a 是一個強制引數。如果我們在執行這個函式時沒有傳入 bin 的數量,那麼它將計算出十個不等距的 bin。

import numpy as np

a = np.array(
    [89, 34, 56, 87, 90, 23, 45, 12, 65, 78, 9, 34, 12, 11, 2, 65, 78, 82, 28, 78]
)

histogram = np.histogram(a)
print(histogram)

輸出:

(
    array([2, 3, 2, 2, 1, 0, 1, 2, 3, 4], dtype=int64),
    array([2.0, 10.8, 19.6, 28.4, 37.2, 46.0, 54.8, 63.6, 72.4, 81.2, 90.0]),
)

示例程式碼:numpy.histogram() 指定 bins 的數量和大小

我們先指定 bins

import numpy as np

a = np.array(
    [89, 34, 56, 87, 90, 23, 45, 12, 65, 78, 9, 34, 12, 11, 2, 65, 78, 82, 28, 78]
)

histogram = np.histogram(a, bins=2)
print(histogram)

輸出:

(array([10, 10], dtype=int64), array([ 2., 46., 90.]))

上面的程式碼計算出了一個有 2 個 bins 的直方圖。分割槽是 [2., 46.)[46., 90.)

現在,我們將指定直方格的邊緣。

import numpy as np

a = np.array(
    [89, 34, 56, 87, 90, 23, 45, 12, 65, 78, 9, 34, 12, 11, 2, 65, 78, 82, 28, 78]
)

histogram = np.histogram(a, bins=[0, 30, 60, 90])
print(histogram)

輸出:

(array([7, 4, 9]), array([0, 30, 60, 90]))

示例程式碼:numpy.histogram() 使用 density 引數

import numpy as np

a = np.array(
    [89, 34, 56, 87, 90, 23, 45, 12, 65, 78, 9, 34, 12, 11, 2, 65, 78, 82, 28, 78]
)

histogram = np.histogram(a, bins=5, density=True)
print(histogram)

輸出:

(array([ 0.01420455,  0.01136364,  0.00284091,  0.00852273,  0.01988636]), 
 array([  2. ,  19.6,  37.2,  54.8,  72.4,  90. ]))

請注意,該函式不是計算直方圖的值,而是生成概率。

示例程式碼:numpy.histogram() 繪製直方圖

我們可以使用 pyplot 繪製直方圖。

from matplotlib import pyplot as plt
import numpy as np

a = np.array(
    [89, 34, 56, 87, 90, 23, 45, 12, 65, 78, 9, 34, 12, 11, 2, 65, 78, 82, 28, 78]
)

plt.hist(a, bins=[0, 20, 40, 60, 80, 100])
plt.title("histogram")
plt.show()

輸出:

numpy 直方圖