Numpy-05数学统计函数

Numpy数学统计函数

1.Numpy有哪些数学统计函数:

函数名 说明
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 方差

2.怎样实现按不同的axis计算

以上函数,都有一个参数叫做axis用于指定计算轴为行还是列,如果不指定,那么会计算所有元素的结果

3.实例:机器学习将数据进行标准化

A = (A - mean(A, axis=0)) / std(A, axis=0)


1.Numpy的数学统计函数

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

2.Numpy的axis参数的用途

axis=0代表行、axis=1代表列

对于sum/mean/media等聚合函数:

理解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)

3.实例:机器学习将数据进行标准化

In [24]:

arr

Out[24]:

array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
arr如果对应到现实世界的一种解释:
·行:每行对应一个样本数据
·列:每列代表样本的一个特征
数据标准化:
对于机器学习、神经网络来说,不同列的量纲应该相同,训练收敛的更快
比如商品的价格是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]])

你可能感兴趣的:(机器学习,概率论,算法)