函数名 | 说明 |
---|---|
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 | 方差 |
以上函数,都有一个参数叫做axis用于指定计算轴为行还是列,如果不指定,那么会计算所有元素的结果
A = (A - mean(A, axis=0)) / std(A, axis=0)
In [1]:
import numpy as np
In [3]:
arr = np.arange(12).reshape(3, 4)
arr
Out[3]:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
In [4]:
np.sum(arr)
Out[4]:
66
In [6]:
np.prod(arr)
Out[6]:
0
In [7]:
np.cumsum(arr)
Out[7]:
array([ 0, 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 66], dtype=int32)
In [8]:
np.cumprod(arr)
Out[8]:
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int32)
In [9]:
np.min(arr)
Out[9]:
0
In [10]:
np.max(arr)
Out[10]:
11
In [12]:
np.percentile(arr, [25, 50, 75])
Out[12]:
array([2.75, 5.5 , 8.25])
In [13]:
np.quantile(arr, [0.25, 0.5, 0.75])
Out[13]:
array([2.75, 5.5 , 8.25])
In [14]:
np.median(arr)
Out[14]:
5.5
In [15]:
np.mean(arr)
Out[15]:
5.5
In [16]:
np.std(arr)
Out[16]:
3.452052529534663
In [17]:
np.var(arr)
Out[17]:
11.916666666666666
In [18]:
# weights的shape需要和arr一样weights = np.random.rand(*arr.shape)np.average(arr, weights=weights)
Out[18]:
4.55113566885391
axis=0代表行、axis=1代表列
理解1:axis=0代表把行消解掉,axis=1代表把列消解掉
理解2:axis=0代表跨行计算,axis=1代表跨列计算
In [19]:
arr
Out[19]:
array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]])
In [20]:
arr.sum(axis=0) # 每一列的和(把行消解掉)
Out[20]:
array([12, 15, 18, 21])
In [21]:
arr.sum(axis=1)
Out[21]:
array([ 6, 22, 38])
In [22]:
arr.cumsum(axis=0)
Out[22]:
array([[ 0, 1, 2, 3],
[ 4, 6, 8, 10],
[12, 15, 18, 21]], dtype=int32)
In [23]:
arr.cumsum(axis=1)
Out[23]:
array([[ 0, 1, 3, 6],
[ 4, 9, 15, 22],
[ 8, 17, 27, 38]], dtype=int32)
In [24]:
arr
Out[24]:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
·行:每行对应一个样本数据
·列:每列代表样本的一个特征
对于机器学习、神经网络来说,不同列的量纲应该相同,训练收敛的更快
比如商品的价格是0到100元、销量是1万到10万个,这俩数字没有可比性,因此需要先都做标准化
不同列代表不同的特征,因此需要axis=0做计算
标准化一般使用A = (A - mean(A, axis=0)) / std(A, axis=0)公式进行
In [25]:
# 计算每一列的平均值
mean = np.mean(arr, axis=0)
mean
Out[25]:
array([4., 5., 6., 7.])
In [26]:
# 计算每一列的方差
std = np.std(arr, axis=0)
std
Out[26]:
array([3.26598632, 3.26598632, 3.26598632, 3.26598632])
In [27]:
# 计算分子,注意每行都会分别减去[4., 5., 6., 7.],这叫做numpy的广播
fenzi = arr - mean
fenzi
Out[27]:
array([[-4., -4., -4., -4.],
[ 0., 0., 0., 0.],
[ 4., 4., 4., 4.]])
In [28]:
result = fenzi / std
result
Out[28]:
array([[-1.22474487, -1.22474487, -1.22474487, -1.22474487],
[ 0. , 0. , 0. , 0. ],
[ 1.22474487, 1.22474487, 1.22474487, 1.22474487]])
In [29]:
arr2 = np.random.randint(1, 100, size=(3, 4))
arr2
Out[29]:
array([[65, 12, 41, 35],
[53, 10, 67, 50],
[48, 88, 32, 47]])
In [30]:
result = (arr2 - np.mean(arr2, axis=0)) / np.std(arr2, axis=0)
result
Out[30]:
array([[ 1.35508101, -0.67938531, -0.38185378, -1.38873015],
[-0.32708852, -0.7344706 , 1.37018122, 0.9258201 ],
[-1.02799249, 1.41385591, -0.98832744, 0.46291005]])