*numpy (import numpy as np)
1.创建ndarray:
(1).用list数组创建
list=[a,b,c] n=np.array(list)
(2).创建一个全为1的ndarray
n=np.ones(shape=(3,3)) print(n)
(3).创建全为0的ndarray
n=np.zeros(shape=(3,3)) print(n)
(4).创建全为指定数字的ndarray
n=np.full(shape=(3,3),fill_value=5) print(n)
(5).创建对角线为指定数字的ndarray
n=np.eye(N=6,M=6,k=0) # k为偏移量 print(n)
(6)创建等差数列
n=np.linspace(start=1,stop=101,endpoint=False,num=50) # endpoint 是否包含最后一个 间隔为(101-1)/50=2 print(n)
(7)相当于python中的range
n=np.arange(1,6) print(n)
(8)随机生成一个数
#随机生成一个指定范围整数 n=np.random.randint(1,6,size=(2,3)) print(n) #随机生成一个指定范围的浮点数 n=np.random.uniform(low=0.0, high=1.0, size=(2,3)) print(n) #随机生成一个0到1之间的浮点数 n=np.random.random(size=(2,3)) print(n) #从一个迭代器中随机选择一个元素 a=list('abc') n=np.random.choice(a,size=(2,3)) print(n) #随机生成一个服从标准正态分布的函数的数字 n=np.random.randn(1,3) print(n) #随机生成一个服从正态分布的数字 n=np.random.normal(loc=0.0, scale=1.0, size=(2,3)) #loc 代表均值 #scale代表标准差 print(n)
2.Ndarray属性:
(1).ndim:维度
(2)shape:形状
(3)size:总长度
(4)dtype:类型
3.numpy的索引操作和切片操作
(1).索引操作
n=np.random.randint(0,10,size=(4,4)) print(n) print(n[3,3]) print(n[-1,-1])#得到倒数第一行的倒数第一个数字
(2)切片操作
#行 n=np.random.randint(0,10,size=(4,4)) print(n) # 取一行 索引 print(n[0]) print('--------------------------------------') # 取连续多行,切片 print(n[2:4]) print('---------------------------------------') # 取不连续多行,中括号 print(n[[1,3]])
# 列 n=np.random.randint(0,10,size=(4,4)) print(n) # 取一列,取所有行和第一列 print(n[:,0]) # 取连续的多列 print(n[:,1:3]) # 取不连续的多列,中括号 print(n[:,[1,3,4]])
4.数组变形,级联,拆分和拷贝
(1)变形
n=np.arange(1,21) print(n) print('--------------------------------') # 把一维变成二维 n2=np.reshape(n,(4,5)) print(n2) print('------------------------------') #使用-1,表示任意剩余维度长度 n3=n2.reshape(4,-1) n4=n2.reshape(-1,4) n5=n2.reshape(-1,2) # 直接把原来的一行变成一列了 n6=n2.reshape(-1,1)
(2)级联
n1=np.random.randint(0,10,size=(3,5)) n2=np.random.randint(0,10,size=(3,5)) # 默认上下合并 n3=np.concatenate(n1,n2) # axis参数 0表示第一个维度合并(行合并),1表示第二个维度合并(列合并) # hstack 水平合并 n4=np.hstack() # vstack 垂直合并 n5=np.vstack()
(3)拆分
n1=np.random.randint(0,10,size=(3,6)) # 垂直拆分,平均拆成三份 n2=np.vsplit(n1,3) # 按照指定位置去拆分 n3=np.vspilt(n1,(1,2,4)) # 水平 hsplit同理 # split axis 0代表行拆分,1代表列拆分 n4=np.split(n1,2,axis=0)
(4)数组的拷贝
n=np.arange(0,10) # 浅拷贝:拷贝的是一个地址 n2=n # 深拷贝:得到一个全新的数组 n3=n=np.copy(n)
4.numpy聚合操作
(1)得到一个值
求和:np.sum()
最小值:np.min
最大值:np.max
平均值:np.average
中位数:np.median
百分位数:np.percentile
最小值对应下标:np.argmin
最大值对应下标:np.argmax
标准差:np.std
方差:np.var
次方,求幂:np.power
按条件查找:np.argwhere
(2)常见的数学操作
abs:绝对值
sqrt:开平方 (n**0.5)
square:平方
exp:指数
log:对数 (以e为底的对数)log2(n)以2为底的对数
sin:正弦
cos:余弦
tan:正切
round:四舍五入
ceil:向上取整
floor:向下取整
cumsum:累加 [1,2,3,4] [1,3,6,10]
5.矩阵的基本操作
(1)矩阵和数字之间的运算
加+,减-,乘*,除/,整除//,次方**,余数%
(2)矩阵和矩阵之间的操作
同上,乘法是对应元素相乘
(3)矩阵中其他操作:(线性代数常用)
#矩阵积 n=np.dot(n1,n2) (第一个矩阵的列数等于第二个矩阵的行数) #矩阵逆 np.linalg.inv(n) #矩阵的行列式 np.linalg.det(n) #矩阵的秩 np.linalg.matrix_rank(n)
6.广播机制
(1)两条规则
规则一:为缺失的维度补维度
规则二:缺失元素用已有值填充
7.排序
np.sort:不改变原数组
ndarray.sort():改变原数组,不多占内存空间