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