08 Numpy 中的聚合操作
import numpy as np
# 生成 [0, 1)之间的随机浮点数
L = np.random.random(100)
# Python中的求和
sum(L)
45.06650103069986
# np中的也有, 什么区别呢 ? ____> 效率
np.sum(L)
45.066501030699854
np.random.rand(1000000)
# 生成[0, 1)之间均匀分布的随机数组 randn()为正太分布的数组 平均数为0 标准差为1
array([0.9010839 , 0.32788274, 0.4308207 , ..., 0.32737057, 0.3898526 ,
0.68122126])
big_array = np.random.rand(1000000) # 100万
%timeit sum(big_array)
%timeit np.sum(big_array)
85 ms ± 4.67 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
433 µs ± 9.78 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
min, max
np.min(big_array)
2.0659416377633022e-07
np.max(big_array)
0.9999999007085136
#面向对象的方式
big_array.min()
5.930966538114646e-06
#面向对象的方式
big_array.max()
0.9999999007085136
#面向对象的方式
big_array.sum()
499548.2276981067
多维度聚合
X = np.arange(16).reshape(4,-1)
X
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
# 0 ~ 15 的和 ,所有的元素聚合
np.sum(X)
120
# 求沿着每一行的和, 每一列的和 axis描述的是将要被压缩的维度。
np.sum(X, axis=0)
array([24, 28, 32, 36])
np.sum(X, axis=1)
array([ 6, 22, 38, 54])
注意:axis描述的是将要被压缩的维度。
其他聚合操作
# 所有元素的乘积
np.prod(X)
0
# 每一个元素加 1
np.prod(X + 1)
20922789888000
# 平均值
np.mean(X)
7.5
# 中位数
np.median(X)
7.5
# 比作每个人工资
v = np.array([1, 1, 2, 2, 10])
np.mean(v)
3.2
np.median(v)
2.0
# big_array半分位点的值
np.percentile(big_array, q=50)
0.4991844210435135
np.median(big_array)
0.4991844210435135
np.percentile(big_array, q=100)
0.9999999007085136
np.max(big_array)
0.9999999007085136
for percent in [0, 25, 50, 75, 100]:
print(np.percentile(big_array, q=percent))
5.930966538114646e-06
0.24921594838832217
0.4991844210435135
0.7499096639124945
0.9999999007085136
# 方差
np.var(big_array)
0.08335190610761217
# 标准差
np.std(big_array)
0.28870730179129894
# 均值为 0 方差为1
x = np.random.normal(0, 1, 1000000)
# 平均值
np.mean(x)
-0.0002871503582399596
np.std(x)
1.000075185869526