Python numpy 数组平均值

Python numpy average() 函数有助于计算给定数组沿指定轴的加权平均值。

Python numpy average 语法

此统计方法的语法是

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

参数是

  • a = 数组
  • 如果指定了轴值,此函数将仅计算该轴的平均值。
  • weights – 如果定义了权重,它将计算加权平均值。
  • returned – 如果将其设置为 true,它将返回权重的总和。
  • keepdims – 保留原始形状。

average() 和 mean() 之间的区别

average() 和 mean() 函数都将计算 ndarray 的平均值。但是,Python numpy average() 有一个 weight 参数来计算加权平均值。

Python numpy average 示例

在此 示例 中,我们声明了一个包含五个整数的一维 ndarray。接下来,我们计算数组的普通平均值和加权平均值。

import numpy as np

a = np.array([10, 20, 30, 40, 50])

b  = np.average(a)
print(b)

c = np.average(a, weights = [2, 4, 6, 8, 10])
print(c)

d = np.average(a, weights = [2, 4, 6, 8, 10], returned = True)
print(d)
30.0
36.666666666666664
(36.666666666666664, 30.0)

(10 * 2 + 20* 4 + 30 * 6 + 40* 8 + 50* 10) / (2 + 4 + 6+ 8 + 10)

= (20 + 80 + 180 + 320 + 500) / 30

= 1100 / 30 

= 36.666666666666664

在最后一行,我们使用 returned = True 将返回给定权重的总和。总和 = 2 + 4 + 6+ 8 + 10 = 30

二维示例

在此程序中,我们将声明一个二维方阵。

import numpy as np

a = np.array([[10, 20], [30, 40]])

b  = np.average(a)
print(b)

c = np.average(a, weights = [[3, 5], [6, 2]])
print(c)
25.0
24.375

b = (10 + 20 + 30 + 40) \ 4 = 100 / 4 = 25

c = (10 * 3 + 20* 5 + 30 * 6 + 40* 2) / (3 + 5 + 6 + 2) = 390/ 16 

c = 24.375

默认情况下,此 Python 函数计算整个 numpy 数组的平均值。但是,我们可以通过指定轴值来计算行和列的平均值。例如,在下面的示例中,axis = 0 计算每列的平均值,axis = 1 计算每行的平均值。

如果使用 keepdims 参数并为其分配 True 值,结果将重塑。

import numpy as np

a = np.arange(20).reshape(4, 5)
print(a)

b  = np.average(a)
print(b)

c = np.average(a, axis = 0)
print(c)

d = np.average(a, axis = 1)
print(d)

e = np.average(a, axis = 1,  keepdims = True)
print(e)
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]
 [15 16 17 18 19]]

9.5

[ 7.5  8.5  9.5 10.5 11.5]

[ 2.  7. 12. 17.]

[[ 2.]
 [ 7.]
 [12.]
 [17.]]

在此示例中,我们使用 arange 和 reshape 方法生成了一个 4*3 大小的二维数组,数字从 0 到 11。接下来,我们使用 axis 和 weights,以便 Python 计算 numpy 数组行和列的加权平均值。

import numpy as np

a = np.arange(12).reshape(4, 3)
print(a)

b  = np.average(a)
print(b)

c = np.average(a, axis = 0, weights = [3, 5, 7, 9])
print(c)

d = np.average(a, axis = 1, weights = [2, 4, 6])
print(d)
[[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]]

5.5

[5.75 6.75 7.75]

[ 1.33333333  4.33333333  7.33333333 10.33333333]

对于 b = (0 + 1 + 2+ 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11) / 12 = 66/12 = 5.5

c 中的第一列 = (0 * 3 + 3 * 5 + 6 * 7 + 9 * 9) / (3 + 5 + 7 + 9) = 138 / 24 = 5.75

d 中的第一行 = (0 * 2 + 1 * 4 + 2 * 6) / (2 + 4 + 6) = 16 / 12 = 1.33333333