Numpy(Numerical Python)开源的Python科学计算库,用于快速处理任意维度的数组。支持常见的数组和矩阵操作。
数学上将一维数组称为向量,将二维数组称为矩阵。另外,可以将一般化之后的向量或矩阵等统
称为张量(tensor)。
使用ndarray对象来处理多维数组。ndarray比python原生的列表list运算效率高。
ndarray
属性
- ndarray.shape 数据维度的元组,返回(行,列),shape[0]一维数组长度,shape[1]二维数组长度
- ndarray.ndim 数组维数,返回维数
- ndarray.size 数组中的元素数量,返回元素数量
- ndarray.itemsize 一个数组元素的长度,返回数组元素长度
- ndarray.dtype 数组元素的类型,返回数组元素类型
- axis = 0,对列数据计算
- axis = 1,对行数据计算
形状
- 一维
- 二维
- 三维
生成0和1的数组
- np.ones(shape, dtype)
- np.zeros(shape,dtype)
W_update=np.zeros_like(W)
函数主要是想实现构造一个矩阵W_update,其维度与矩阵W一致,并为其初始化为全0;这个函数方便的构造了新矩阵,无需参数指定shape大小;
生成数组方式
- np.array(object, dtype) #深拷贝
- np.asarray(a,dtype) #浅拷贝
生成固定范围的数组
- 创建等差数组(指定数量)np.linspace(start, stop, num, endpoint) num为等间隔数量,endpoint表示序列是否包含stop值,默认true
- 创建等差数组(指定步长)np.arange(start, stop, step, dtype) step为步长
- 创建等比数列np.logspace(start,stop,num) num为等比数列数量,默认50
正态分布
μ为正态分布的随机变量均值,σ的平方为随机变量方差。μ决定位置,标准差σ决定分布的幅度。方差越大,图线越“胖”,越小越“瘦”。标准正态分布又称为u分布,是以0为均值、以1为标准差的正态分布,记为N(0,1)。
np.random.rand(d0,d1,…,dn)
- rand函数根据给定维度生成[0,1)之间的数据,包含0,不包含1
- dn表格每个维度
- 返回值为指定维度的array
np.random.randn(d0, d1, ..., dn)
- 从标准正态分布中返回一个或多个样本值,具有标准正态分布。
- dn表格每个维度
- 返回值为指定维度的array
np.random.randint(low, high=None, size=None, dtype=’l’)
- 返回随机整数,范围区间为[low,high),包含low,不包含high
- 参数:low为最小值,high为最大值,size为数组维度大小,dtype为数据类型,默认的数据类型是np.int
- high没有填写时,默认生成随机数的范围是[0,low)
np.random.random_integers(low, high=None, size=None)
- 返回随机整数,范围区间为[low,high],包含low和high
- 参数:low为最小值,high为最大值,size为数组维度大小
- high没有填写时,默认生成随机数的范围是[1,low]
生成[0,1)之间的浮点数
- np.random.random_sample(size=None)
- np.random.random(size=None)
- np.random.ranf(size=None)
- np.random.sample(size=None)
numpy.random.choice(a, size=None, replace=True, p=None)
- 从给定的一维数组中生成随机数
- 参数: a为一维数组类似数据或整数;size为数组维度;p为数组中的数据出现的概率
- a为整数时,对应的一维数组为np.arange(a)
- 当replace为False时,生成的随机数不能有重复的数值
- 参数p的长度与参数a的长度需要一致;
- 参数p为概率,p里的数据之和应为1
numpy.random.seed()
- np.random.seed()的作用:使得随机数据可预测。
- 当我们设置相同的seed,每次生成的随机数相同。如果不设置seed,则每次会生成不同的随机数
np.random.normal(loc=0.0, scale=1.0,size=None)
- loc:概率分布的均值,float类型
- scale:概率分布的标准差,float类型,scale越大越矮胖,scale越小越瘦高。
- size:int或tuple类型
np.random.standard_normal(size=None)
- 返回指定形状的标准正态分布数组
均匀分布
np.random.uniform(low=0.0 , hight=1.0 ,size=None)
- 从一个均匀分布[low, high)中随机采样,定义域左闭右开
- low:采样下界,float类型,默认值0
- high:采样上界,float类型,默认值1
- size:输出样本数目,int或tuple类型
- 返回值:ndarray类型
np.random.randint(low, high=None, size=None, dtype=’l’)
- 从一个均匀分布中随机采样,生成一个整数或N维整数数组
- 返回随机整数,范围区间为[low,high),包含low,不包含high
- 参数:low为最小值,high为最大值,size为数组维度大小,dtype为数据类型,默认的数据类型是np.int
- high没有填写时,默认生成随机数的范围是[0,low)
数组形状修改
ndarray.reshape(shape, order)
- 返回一个具有相同数据域,但shape不一样的视图,行列不进行互换。shape为[行, 列]
ndarray.resize(new_shape)
- 修改数组本身的形状(需要保持元素个数前后相同),行列不进行互换
ndarray.T
- 数组的转置,行列进行互换
数组类型修改
ndarray.astype(type)
- 返回修改类型后的数组。如exm.astype(np.int32)
ndarray.tostring([order])
- 构造包含数组中原始数据的字节
数组去重
np.unique()
- temp=np.array([1,2,3],[3,4,5])
- np.unique(temp)
- temp为([1,2,3,4,5])
广播机制(broadcasting)
实现两个或两个以上数组运算,即使数组的shape不完全相同,只需要满足以下任意一个条件即可
- 数组的某一维度等长
- 其中一个数组的某一维度为1
矩阵乘法
np.matmul(a, b) 禁止矩阵与标量(数字)的乘法
np.dot(a, b)
转换为一维数组
np.flatten()
取元素中最大值对应的索引
np.argmax()