numpy.ma.average#

ma.average(a, axis=None, weights=None, returned=False, *, keepdims=<no value>)[原始碼]#

傳回沿著給定軸的陣列加權平均值。

參數:
aarray_like (類陣列)

要計算平均值的資料。遮罩項目在計算中不予考慮。

axisNone 或 int 或 ints 元組,選用

要沿著其計算 a 平均值的軸或多個軸。預設值 axis=None 將計算輸入陣列中所有元素的平均值。如果 axis 是 ints 元組,則會在元組中指定的所有軸上執行平均值計算,而不是單一軸或像之前一樣的所有軸。

weightsarray_like (類陣列),選用

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

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

其中總和是對所有包含的元素求和。對 weights 值唯一的限制是 sum(weights) 不得為 0。

returnedbool,選用

旗標,指示是否應將元組 (result, 權重總和) 作為輸出 (True) 傳回,或僅傳回結果 (False)。預設值為 False。

keepdimsbool,選用

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

版本 1.23.0 新增。

傳回值:
average (平均值), [sum_of_weights (權重總和)](元組,包含) 純量或 MaskedArray (遮罩陣列)

沿著指定軸的平均值。當 returned 為 True 時,傳回一個元組,其中平均值為第一個元素,權重總和為第二個元素。如果 a 是整數型別且浮點數小於 float64,則傳回型別為 np.float64,否則為輸入資料型別。如果傳回,sum_of_weights 始終為 float64

引發:
ZeroDivisionError (除以零錯誤)

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

TypeError (型別錯誤)

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

ValueError (值錯誤)

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

範例

>>> import numpy as np
>>> a = np.ma.array([1., 2., 3., 4.], mask=[False, False, True, True])
>>> np.ma.average(a, weights=[3, 1, 0, 0])
1.25
>>> x = np.ma.arange(6.).reshape(3, 2)
>>> x
masked_array(
  data=[[0., 1.],
        [2., 3.],
        [4., 5.]],
  mask=False,
  fill_value=1e+20)
>>> data = np.arange(8).reshape((2, 2, 2))
>>> data
array([[[0, 1],
        [2, 3]],
       [[4, 5],
        [6, 7]]])
>>> np.ma.average(data, axis=(0, 1), weights=[[1./4, 3./4], [1., 1./2]])
masked_array(data=[3.4, 4.4],
         mask=[False, False],
   fill_value=1e+20)
>>> np.ma.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.
>>> avg, sumweights = np.ma.average(x, axis=0, weights=[1, 2, 3],
...                                 returned=True)
>>> avg
masked_array(data=[2.6666666666666665, 3.6666666666666665],
             mask=[False, False],
       fill_value=1e+20)

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

>>> np.ma.average(x, axis=1, keepdims=True)
masked_array(
  data=[[0.5],
        [2.5],
        [4.5]],
  mask=False,
  fill_value=1e+20)