函数名 说明
np.sum 所有元素的和
np.prod 所有元素的乘积
np.cumsum 元素的累积加和
np.cumprod 元素的累积乘积
np.min 最小值
np.max 最大值
np.percentile 0-100百分位
np.quantile 0-1分位数
np.median 中位数
np.average 加权平均,参数可以指定weights(位置)
np.mean 平均值
np.std 标准差
np.var 方差
import numpy as np
arr=np.arange(12).reshape(3,4)
arr
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
np.sum(arr)
66
np.prod(arr)
0
np.cumsum(arr) # 3=0+1+2 6=0+1+2+3 .....
array([ 0, 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 66], dtype=int32)
np.cumprod(arr) # 因为有0,所以累积乘积为0
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int32)
np.min(arr)
0
np.max(arr)
11
# 排序为2,3,6,10,11,12,首先占比为0和占比100的当然就是最小值和最大值了;
# 其次占比为25%的数小于2.75;再次占比为50%的数小于5.5,即小于中位数;最后占比为75%的数小于8.25;
np.percentile(arr,[0,25,50,75,100]) # 2.75=(11+0)/4 5.5=(11+0)/2 8.25=(11+0)/4*3
array([ 0. , 2.75, 5.5 , 8.25, 11. ])
np.quantile(arr,[0,0.25,0.50,0.75,1]) # 和percentile 类似
array([ 0. , 2.75, 5.5 , 8.25, 11. ])
np.median(arr) # 中位数
5.5
np.mean(arr) # 平均值
5.5
np.std(arr) # 标准差
3.452052529534663
np.var(arr) # 方差
11.916666666666666
# weights的shape需要和arr一样,加权平均
weights= np.random.rand(*arr.shape)
np.average(arr,weights=weights)
5.88460046894379
arr
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
np.sum(arr,axis=0) # 跨行计算,12=0+4+8 15=1+5+9 18=2+6+10 21=3+7+11
array([12, 15, 18, 21])
np.sum(arr,axis=1) # 跨列计算 6=0+1+2+3 22=4+5+6+7 38=8+9+10+11
array([ 6, 22, 38])
np.cumsum(arr,axis=0) # 跨行计算累积和 12=4+8 15=6+9 18=8+10 21=10+11
array([[ 0, 1, 2, 3],
[ 4, 6, 8, 10],
[12, 15, 18, 21]], dtype=int32)
np.cumsum(arr,axis=1) # 跨列计算
array([[ 0, 1, 3, 6],
[ 4, 9, 15, 22],
[ 8, 17, 27, 38]], dtype=int32)
A=(A-mean(A,axis=0))/std(A,axis=0)
arr
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
arr对应显示中的一种解释:
数据标准化:
# 计算每列的均值
mean=np.mean(arr,axis=0) # 跨行得到每列的数值
mean
array([4., 5., 6., 7.])
# 计算每列的方差
std=np.std(arr,axis=0)
std
array([3.26598632, 3.26598632, 3.26598632, 3.26598632])
# 计算分子,每行都会减去【4,5,6,7】,这叫做numpy的广播
fenzi=arr-mean # 三行四列 减去 一行四列 常识不能计算,但是广播将一行四列复制成为了三行四列进行计算
fenzi
array([[-4., -4., -4., -4.],
[ 0., 0., 0., 0.],
[ 4., 4., 4., 4.]])
# 标准化
fenzi/std
array([[-1.22474487, -1.22474487, -1.22474487, -1.22474487],
[ 0. , 0. , 0. , 0. ],
[ 1.22474487, 1.22474487, 1.22474487, 1.22474487]])
arr2=np.random.randint(1,100,size=(3,4))
arr2
array([[36, 96, 89, 5],
[98, 2, 77, 82],
[87, 15, 47, 84]])
# arr2减去所有列的均值再除以所有列的方差
result=(arr2-np.mean(arr2,axis=0))/np.std(arr,axis=0)
result
array([[-11.53301421, 17.86086271, 5.51135192, -15.92168333],
[ 7.4505313 , -10.92064177, 1.83711731, 7.65465545],
[ 4.0824829 , -6.94022094, -7.34846923, 8.26702788]])