numpy.average#

numpy.average(a, axis=None, weights=None, returned=False, *, keepdims=<no value>)[source]#

計算沿指定軸的加權平均。

參數:
aarray_like

包含要平均之資料的陣列。 如果 a 不是陣列,則會嘗試轉換。

axisNone 或 int 或 tuple of ints,optional

要沿其平均 a 的軸或多個軸。預設值 axis=None 將對輸入陣列的所有元素取平均值。 如果 axis 為負數,則從最後一個軸向第一個軸計數。 如果 axis 是整數元組,則對元組中指定的所有軸執行平均,而不是像以前一樣對單個軸或所有軸執行平均。

weightsarray_like,optional

a 中值相關聯的權重陣列。 a 中的每個值都根據其相關聯的權重對平均值做出貢獻。 如果未指定軸,則權重陣列的形狀必須與 a 相同,否則權重必須具有與沿指定軸的 a 一致的維度和形狀。 如果 weights=None,則假定 a 中的所有資料都具有等於 1 的權重。 計算公式為

avg = sum(a * weights) / sum(weights)

其中總和是對所有包含的元素求和。 對於 weights 值的唯一約束是 sum(weights) 不能為 0。

returnedbool,optional

預設值為 False。 如果為 True,則傳回元組 (average, sum_of_weights),否則僅傳回平均值。 如果 weights=None,則 sum_of_weights 等同於取平均值的元素數量。

keepdimsbool,optional

如果設定為 True,則縮減的軸將保留在結果中,作為大小為 1 的維度。 使用此選項,結果將針對原始 a 正確廣播。 注意: keepdims 不適用於 numpy.matrix 或其他方法不支援 keepdims 的類別實例。

在版本 1.23.0 中新增。

傳回值:
retval, [sum_of_weights]array_type 或 double

傳回沿指定軸的平均值。 當 returnedTrue 時,傳回一個元組,其中平均值作為第一個元素,權重總和作為第二個元素。 sum_of_weightsretval 的型別相同。 結果 dtype 遵循一般模式。 如果 weights 為 None,則結果 dtype 將為 a 的 dtype,如果 a 是整數型別,則為 float64。 否則,如果 weights 不為 None 且 a 為非整數型別,則結果型別將為能夠表示 aweights 值的最低精確度型別。 如果 a 恰好是整數型別,則先前的規則仍然適用,但結果 dtype 至少為 float64

引發:
ZeroDivisionError

當沿軸的所有權重均為零時。 請參閱 numpy.ma.average 以取得針對此類型錯誤的穩健版本。

TypeError

weights 的形狀與 a 不同,且 axis=None 時。

ValueError

weights 沒有與沿指定 axisa 一致的維度和形狀時。

另請參閱

mean
ma.average

用於遮罩陣列的 average – 如果您的資料包含「遺失」值,則很有用

numpy.result_type

傳回將 numpy 型別提升規則套用於引數後產生的型別。

範例

>>> import numpy as np
>>> data = np.arange(1, 5)
>>> data
array([1, 2, 3, 4])
>>> np.average(data)
2.5
>>> np.average(np.arange(1, 11), weights=np.arange(10, 0, -1))
4.0
>>> data = np.arange(6).reshape((3, 2))
>>> data
array([[0, 1],
       [2, 3],
       [4, 5]])
>>> np.average(data, axis=1, weights=[1./4, 3./4])
array([0.75, 2.75, 4.75])
>>> np.average(data, weights=[1./4, 3./4])
Traceback (most recent call last):
    ...
TypeError: Axis must be specified when shapes of a and weights differ.

使用 keepdims=True,以下結果的形狀為 (3, 1)。

>>> np.average(data, axis=1, keepdims=True)
array([[0.5],
       [2.5],
       [4.5]])
>>> data = np.arange(8).reshape((2, 2, 2))
>>> data
array([[[0, 1],
        [2, 3]],
       [[4, 5],
        [6, 7]]])
>>> np.average(data, axis=(0, 1), weights=[[1./4, 3./4], [1., 1./2]])
array([3.4, 4.4])
>>> np.average(data, axis=0, weights=[[1./4, 3./4], [1., 1./2]])
Traceback (most recent call last):
    ...
ValueError: Shape of weights must be consistent
with shape of a along specified axis.