import numpy as np
生成Numpy数组
data1=[1, 2.1, 3, 4]
array1=np.array(data1)
array1.dtype --- 查看数组array1的数据类型
array1.shape --- 查看数组array1的形状,也就是尺寸
arrray1.ndim --- 查看array1的维度
array1.astype(np.int32) --- astype( )用于转换数组array1的数据类型,这里转换为整型
array1=np.array([[1, 2, 3], [3, 4, 5]]) --- 生成二维数组
array1=np.arange(start, stop, step, dtype) --- 生成数组,数据范围为 [start, stop),步长为step,步长可以取浮点数,数据类型为dtype
array1=np.linespace(start,stop,step) --- 生成数组,数据等间隔,数据范围为 [start, stop],步长为 step
zeros1=np.zeros((2,3)) --- 生成2行3列的二维数组,元素都为0,也可以np.zeros(shape=(2,3))或np.zeros(shape=[2,3])
ones1=np.ones(shape=[2,3], dtype=float) --- 生成2*3的二维数组,元素都为1,且元素数据类型为浮点数
zeros2=np.zeros_like(array1) --- 生成一个和数组array1行列相同、元素数据类型相同的数组,不过元素都为0
ones2=np.ones_like(array1) --- 生成一个和数组array1行列相同、元素数据类型相同的数组,不过元素都为1
array2=array1.reshape((4,5)) --- 假设array1=np.arange(20),则array2被重构成4*5的二维数组
np.empty_like( ) --- 产生和给定数组尺寸和类型相同的数组,不过元素没有被初始化
np.full_like( ) --- 产生和给定数组尺寸和类型相同的数组,数组中的元素被初始化为某个给定值
生成Numpy三维数组
其实就是生成2个二维数组 array1=np.array([[[1, 2 ,3], [4, 5, 6]], [[1, 1, 1], [0, 0, 0]]])
array1也可以称为2通道2行3列数组
array1=np.arange(20).reshape(2,2,5) --- 重构生成数组为2通道2行5列
数组向量运算
a=np.array([1, 2, 3, 4])
b=np.array([2, 3, 4, 5])
对于尺寸相同的数组可以用+、-、*、/等运算符对相同位置的元素进行运算
a+b --- 得到 [3, 5, 7, 9]
a-b --- 得到 [-1, -1, -1, -1]
此外还有a*b、a/b、a%b等等
a**2 --- 得到 [1, 4, 9, 16],每个元素的平方
另外numpy还提供了sum()、min()、max()、median()、mean()、average()、std()、var()这些函数分别用于求和、最小值、最大值、中位数、平均数、加权平均数、标准差、方差
np.dot(a,b) --- 满足矩阵相乘条件时,可以得到矩阵a与b相乘的结果
np.inner(a,b) --- 求向量a和b的内积
np.transpose(array1) --- 求数组array1对应矩阵的转置
a.flattern() 或 a.ravel() --- 将矩阵a展平为一维数组
np.mat(a) --- 可以将数组a转换成矩阵,a=np.mat(a)、b=np.mat(b),这样a*b直接可以得到与np.dot(a,b)一样的结果
a=np.mat(a), a.I --- a.I 返回矩阵a的逆矩阵
a=np.mat(a), a.T --- a.T 返回矩阵a的转置矩阵
a.A --- 返回矩阵a对应的数组
np.eye( ) --- 用于生成单位矩阵
np.diag( ) --- 用于生成指定对角线元素的矩阵
einsum() 实现矩阵或向量的运算
array1=np.arange(5)
sum1=np.einsum('i->',array1) --- 求数组中所有元素的和
array1=np.arange(6).reshape(2,3)
sum1=np.einsum('ij->j',array1) --- 对于array1按列求和,就是把每列上的元素相加
sum1=np.einsum('ab-a',array1) --- 对于array1按行求和,就是把每行上的元素相加
还可以 np.einsum('abc->bc',array1)
array1=np.arange(6).reshape(2,3), array2=np.arange(6).reshape(3,2)
np. einsum('ij, jk->ik', array1, array2) --- 实现array1和array2的矩阵乘法
np.einsum('ij, ij->ij', array1, array2) --- 实现array1和array2的矩阵点乘
如果array1和array2是一维向量,则点积或内积为 np.einsum('i,i->', array1, array2)
np.enisum('ii->i', array1) --- 若array1为方阵,则得到对角线元素
np.enisum('ii->', array1) --- 若array1为方阵,则得到array1矩阵的迹
np.enisum('ij->ji', array1) --- 得到array1的转置矩阵
Numpy中利用轴方向运算
array1=np.arange(6),reshape(2,3)
array1.sum(axis=0) --- 按列求和
array1.sum(axis=1) --- 按行求和
array1=np.array([[[1, 2, 3], [2, 3, 4]], [[1, 1, 1], [0, 0, 0]]] --- 2通道2行3列
array1.sum(axis=0) --- 按最外层求和,也就是按通道求和
array1.sum(axis=1) --- 按行求和
array1.sum(axis=2) --- 按列求和
除了array1.sum(),array1.max()、array1.min()、array1.mean()等都可以按轴方向来进行运算
Numpy中的数组切片访问
array1=np.arange(5)
array1[start:end:step]中各个参数的组合,这里取值范围为 [start, end),step为负数则表示倒取数
start:end:step --- [start, end),步长step
start:end --- [start,end), 步长为1
start: --- 从start开始所有元素,步长为1
start::step --- 从start开始所有元素,步长为step
:end:step ---从头开始到end前一个元素结束,步长为step
:end --- 从头开始到end前一个元素结束,步长为1
::step --- 从头开始取元素,直到最后,步长为step
: 或者 :: --- 取所有元素
Numpy维度扩展和数据复制
不同尺寸的数组相加,小尺寸向大尺寸方向扩展,直到和大尺寸一致,这种扩展可以是行方向、列方向、行和列两个方向
不管往哪个方向,都采取数据复制的原则,例:[1, 2, 3]列方向扩展成为 [[1, 2, 3], [1, 2, 3], [1, 2, 3]]
Numpy中的其他索引方式
array1=np.arange(20).reshape(4,5)
row=[0, 2] col=[1, 3]
array1[row] --- 取第0行和第2行数据
array1[:, col] --- 取第1列和第3列数据
array1[row, col] --- 取[0,1]、[2,1]、[0,3]、[2,3]四个元素
array1[array1>5] --- 取所有大于5的元素
Numpy中的数组的拼接与分割
array1=np.arange(25).reshape(5,5)
array2=np.arrage(25).reshape(5,5)
np.hstack(array1,array2) --- 水平拼接,增加列的数量,行的数量不变
np.vstack(array1,array2) --- 垂直拼接,增加行的数量,列的数量不变
np.dstack(array1,array2,array3) --- 三个数组拼接,具体今后用到再搜索相关资料
np.column_stack( ), np.row_stack( ) --- 列方向和行方向上的拼接,今后遇见再查资料
np.hsplit( ), np.vsplit( ), np.dsplit( ) ---- 具体今后遇见再查资料
Numpy中生成随机数
np.random.seed(s) --- 生成随机种子,如果给出s,随机数为伪随机数,如果不给出s,则更加随机
rdm=np.random.RandomState(s) --- 生成随机种子,s给出是伪随机数,s不给出的话,则更加随机
np.random.rand(2,3) --- 生成2行3列的随机数组,均匀分布
np.random.random((2,3)) --- 生成2行3列的随机数组,均匀分布
np.random.randn(2,3) --- 生成2行3列的随机数组,标准正态分布
np.random.randint(1, 10, (2,3)) --- 生成2行3列的随机整数数组,元素范围 [1,10)