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
傳回沿指定軸的平均值。 當 returned 為 True 時,傳回一個元組,其中平均值作為第一個元素,權重總和作為第二個元素。 sum_of_weights 與 retval 的型別相同。 結果 dtype 遵循一般模式。 如果 weights 為 None,則結果 dtype 將為 a 的 dtype,如果 a 是整數型別,則為
float64
。 否則,如果 weights 不為 None 且 a 為非整數型別,則結果型別將為能夠表示 a 和 weights 值的最低精確度型別。 如果 a 恰好是整數型別,則先前的規則仍然適用,但結果 dtype 至少為float64
。
- 引發:
- ZeroDivisionError
當沿軸的所有權重均為零時。 請參閱
numpy.ma.average
以取得針對此類型錯誤的穩健版本。- TypeError
當 weights 的形狀與 a 不同,且 axis=None 時。
- ValueError
當 weights 沒有與沿指定 axis 的 a 一致的維度和形狀時。
另請參閱
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.