在学习Opencv和深度学习前,介于我没怎么用过Python的Numpy库和Pandas库,先开个帖子记录下关于数据处理的常用函数~(对照B站【莫烦Python】学习,应该还有补充的东西,以后碰见了再加)
关于Python Numpy库:
-
基础
array=np.array([[1,2,2],
[3,4,5]]) # np.array可以将列表转换成array
print(array) # 打印出整个array
print('number of dim',array.ndim) # dim就是行数
print('shape',array.shape) # shape指的是(行,列)
print('size',array.size) # size指的是这个array里有几个元素
a= np.array([2,32,45],dtype=np.int) # 默认32位,可能是为了省空间
print(a.dtype)
Numpy数组和矩阵的区别:矩阵必须是二维的 ,而数组可以是一维到任意维。
-
常用创建数组的函数
b=np.zeros((2,3)) # 创建2*3的数组,元素全为0
c=np.ones((2,3)) # 创建2*3的数组,元素全为1
d=np.empty((2,3)) # empty函数构建2*3的一个未初始化的数组,元素可能是内存位置上存在的任何数值
e=np.arange(10,20,2) # 创建一个一维数组,从10到20(20取不到,左闭右开),步长为2
e1=np.arange(12).reshape(3,4) # 创建一个1*12,数值从0到11的数组,再reshape成为3*4的数组
f=np.linspace(1,10,5) # 生成取值为1到10之间,有5个节点(4段)的线段
h=np.random.random((3,4)) # 随机选取(0,1)中的任意数值
-
基本运算
k=np.arange(4).reshape(2,2)
print(k**2) # 对元素进行平方运算
print(2*np.sin(k))
print(k<2) # 对于k中元素进行true 或 false的判断
print(np.sum(k,axis=0),np.max(k,axis=1),np.min(k))
# axis=0,对列进行运算,axis=1,对行进行运算
g=2*np.ones((2,2))
print(k+g) # 对应元素相加
print(k-g) # 对应元素相减
print(k*g) # 第一种乘法,即对应元素相乘
print(np.dot(k,g)) # 第二种乘法,即矩阵乘法,另一种表达:k.dot(g)
-
其他操作
a=np.arange(2,14).reshape(3,4)
print(np.argmin(a)) # 打印出a中最小值的索引
print(np.argmax(a)) # 打印出a中最大值的索引
print(np.mean(a)) # 求a的平均值,也可以用a.mean(),np.average(a)表示
print(np.median(a)) # 求a的中位数
print(np.cumsum(a)) # 累加函数,如果没有区分axis,就当成一个一维数组
print(np.diff(a)) # 累差函数
print(np.nonzero(a)) # 得到不同的arrays从不同维度描述a中非零元素的索引值
print(np.clip(a,5,9)) # a中所有小于5的全赋值为5,大于9的全赋值为9--截取函数
b=np.random.random((2,3))
print(np.sort(b)) # 对b进行排序,但是这个排序不是针对整个b的,而是针对b中每一行
print(b.T) # 转置,即变成(3,2)
print(b[1,1]) # 索引
print(b[1,0:2]) # 切片,取第二行的0和1元素组成新的数组,左闭右开
print(b.flatten()) # 把原本是(2,3)的b变成一维数组
矩阵和数组都可以通过后面加.T得到转置,但是矩阵还可以在后面加.H得到共轭矩阵,加.I得到逆矩阵
而其他的多维数组可以通过object[:,np.newaxis]得到翻转后的数组
合并数组:
k=np.array([1,2,3])
g=np.array([4,5,6])
print(np.vstack((k,g))) # 使两个arrays上下拼在一起的函数
print(np.hstack((k,g))) # 使两个arrays左右拼在一起的函数
print(k[:,np.newaxis]) # 用来翻转数组
print(np.concatenate((k,g,g,k),axis=0))
# 虽然这个函数和vstack,hstack一样都可以合并多个array,但是这个可以要求在不同的维度上合成
拆分数组:
s=np.arange(12).reshape(3,4)
print(np.split(s,2,axis=1))
# split函数拆分矩阵,axis=1是对行进行操作,即每一行从头开始数,数两个数就拆开
print(np.split(s,1,axis=0)) # 对列进行操作,每往下走,遇到一个数就拆开一次
print(np.array_split(s,3,axis=1))
# 这个也是一个拆分函数,但是和split不同,这个可以实现不均匀分割,3--分成3部分
print(np.vsplit(s,3)) # 等同于axis=0,3--分成3部分
print(np.hsplit(s,2)) # 等同于axis=1,2--分成2部分
数组赋值和复制:
c=np.arange(4)
b=c # numpy中赋值,改变c的值,那么b的值也会被改变
d=c.copy() # 复制函数,d只是复制了c的值,但是当c改变的时候,d不变(即只赋值,不关联)
c[1]=5
print(c)
print(b)
print(d)
结果:
[0 5 2 3]
[0 5 2 3]
[0 1 2 3]