import numpy as np
#numpy的随机数函数
'''
numpy的random子库:np.random.*,有np.random.rand(),np.random.randn()
np.random.randint()
'''
a = np.random.rand(2,3,4)#根据所给的shape创建随机数组(均匀分布)
a = np.random.randn(2,3,4)#根据所给shape创建随机数组(标准正态分布)
a = np.random.randint(5,10,(2,3))#根据shape创建随机数组,范围是5到10
'''
np.random.seed(s) 随机数种子,s是给定的种子值
种子数不变时,产生的随机数一样
'''
a = np.random.randint(1,10,(3,4))
np.random.shuffle(a)#将数组的行给打乱,a数组改变
a = np.random.permutation(a)#将数组的行打乱,a数组不改变
a = np.random.randint(10,20,(8,))
b = np.random.choice(a,(2,4),replace = True)
#从a的元素中随机抽取元素生成shape指定的数组,若replace = True则可以重复选取
#同时还有一个可选参数p,默认为None为均匀抽取,例改为p=a/np.sum(a)则说明按数越大抽取越大的概率来抽取
'''
a = np.random.uniform(low,high,size)
a = np.random.normal(loc,scale,size)
产生具有正态分布的数组,loc均值,scale标准差,size形状
a = np.random.poisson(lam,size)
产生具有泊松分布的数组,lam随机事件发生率,size形状
'''
#numpy的统计函数
a = np.arange(15).reshape((3,5))
np.sum(a)#求和函数,可以根据给定轴计算,默认axis = None
np.sum(a,axis = 0)#计算每一列,输出一个一维数组
np.sum(a,axis = 1)#计算每一行,输出一个一维数组
np.mean(a,axis=None)#计算a数组元素的期望,0是列,1是行
np.average(a,axis = None,weights = None)
#计算a数组给定轴的加权平均值,axis同上
#此处weights如果要给的话,应对应行列给出
np.average(a,axis = 0,weights = [2,3,5])
#这里意味着每一行都赋予了相应的权值
#例如第一列求平均 (x1*2+x2*3+x3*5)/(2+3+5)
np.std(a,axis = None)#求标准差
np.var(a,axis = None)#求方差
np.min(a)#求最小值
np.max(a)#求最大值
np.argmin(a)#求a数组中最小值的下标,以降一维为准
np.argmax(a)
np.unravel_index(index,shape)#根据shape将一维index转换为指定维度的下标
np.ptp(a)#计算数组a的极差
np.median(a)#计算数组a的中位数
#numpy的梯度函数
'''
np.gradient(a)
计算数组a中元素的梯度,当a为多维时返回每个维度梯度
梯度:连续值之间的变化率,即斜率
'''
a = np.random.randint(0,20,(5,))
np.gradient(a)
#这里梯度的计算比较难理解,比如一个5元素向量,带入函数也生成同等维度数组(仅限一维数组)
#生成的数组除头尾元素外,其余元素都是相邻元素差除以2,首尾为它本身与相邻元素差除1
#多维数组的梯度较复杂,此处暂不讨论