Python学习第11天:NumPy库用法进阶指南(下)
python每日学习11:numpy库的用法(下)
数组的拼接
名方法称 | 说明 |
---|---|
concatenate | 连接沿现有轴的数组序列 |
hstack | 水平堆叠序列中的数组(列方向) |
vstack | 竖直堆叠序列中的数组(行方向) |
concatenate | 函数用于沿指定轴连接相同形状的两个或多个数组,格式:numpy.concatenate((a1, a2, …), axis) |
# 列表的拼接
a=[1,2,3]
b=[4,5,6]
a.extend(b)
# 一维数组的拼接
x=np.arange(1,4)
y=np.arange(4,7)
print(np.concatenate([x,y]))
# 二维数组的拼接
a=np.array([[1,2,3],[4,5,6]])
b=np.array([['a','b','c'],['d','e','f']])
print(np.concatenate([a,b]))
print(np.concatenate([a,b],axis=0))
print(np.concatenate([a,b],axis=1))
# hstack()、vstack()和dstack()的使用
# numpy.hstack它通过水平堆叠来生成数组。
# numpy.vstack 它通过垂直堆叠来生成数组
# vstack 与hstack的使用
a=np.arange(1,4)
b=np.arange(4,7)
print(np.vstack([a,b]))
print(np.hstack([a,b]))
# 三维数组的拼接
# axis=0可以使用vstack替换
# axis=1可以使用hstack替换
# axis=2可以使用dstack替换
aa=np.arange(1,37).reshape(3,4,3)
bb=np.arange(101,137).reshape(3,4,3)
print(np.concatenate((aa,bb),axis=0))#6 4 3
print(np.concatenate((aa,bb),axis=1)) #3 8 3
print(np.concatenate((aa,bb),axis=2))#3 4 6
数组的转置
# 数组的转置:将行与列对调,即第一行变成第一列…或第一列变成第一行…的操作即使转置操作。
# transpose进行转换
a=np.arange(1,13).reshape(2,6)
print(a)
print(a.transpose())
print(a.T)
数组的分隔
# numpy.split 函数沿特定的轴将数组分割为子数组,格式如下:numpy.split(ary, indices_or_sections, axis)
# split分隔
x=np.arange(1,9)
a=np.split(x,4)
print(a)
print(a[0])
print(a[1])
print(a[2])
print(a[3])
#传递数组进行分隔
b=np.split(x,[3,5])#左开右闭
print(b)
# 水平分隔:使用hsplit函数可以水平分隔数组,该函数有两个参数,第1个参数表示待分隔的数组,第2个参数表示要将数组水平分隔成几个小数组
# hsplit的使用
grid=np.arange(16).reshape(4,4)
a,b=np.hsplit(grid,2)
print(a)
print(b)
# 垂直分隔:使用vsplit函数可以垂直分隔数组,该函数有两个参数,第1个参数表示待分隔的数组,第2个参数表示将数组垂直分隔成几个小数组。
# vsplit的使用
grid=np.arange(16).reshape(4,4)
a,b=np.vsplit(grid,2)#行分成 0+1 2+3
a,b,c=np.vsplit(grid,[1,3])#行分成 0 1+2 3
数学函数
方法 | 说明 |
---|---|
np.abs()、np.fabs() | 计算整数、浮点数的绝对值 |
np.sqrt() | 计算各元素的平方根 |
np.reciprocal() | 计算各元素的倒数 |
np.square() | 计算各元素的平方 |
np.exp() | 计算各元素的指数ex |
np.log() np.log10() np.log2() | 计算各元素的自然对数、底数为10的对数、底数为2的对数 |
np.sign() | 计算各元素的符号,1(整数)、0(零)、-1(负数) |
np.ceil() np.floor() np.rint() | 对各元素分别向上取整、向下取整、四舍五入 |
np.modf() | 将各元素的小数部分和整数部分以两个独立的数组返回 |
np.cos() 、np.sin()、np.tan( | 对各元素求对应的三角函数 |
np.add()、np.subtract()、np.multiply()、np.divide() | 对两个数组的各元素执行加法、减法、乘法、除法求每个元素的倒数 |
a=[3,4,5,6,7,8]
b=np.array(a)
print(1/b)
# reciprocal()函数的使用
a=np.arange(1,10,dtype=np.float32).reshape(3,3)
print(np.reciprocal(a))
# square()函数的使用
# 一维数组
a=np.arange(1,10)
print(np.square(a))
#二维数组
aa=np.arange(1,13).reshape(3,4)
print(np.square(aa))
# sign()函数的使用
a=np.arange(-5,5)
print(np.sign(a))#计算各元素的符号,1(整数)、0(零)、-1(负数)
# modf()函数的使用
b=np.arange(-5,5,0.4)
print(np.modf(b))
# 三角函数的使用:NumPy 提供了标准的三角函数:sin()、cos()、tan()。
x=np.linspace(1,10,5)
y=np.sin(x)
print(y)
# numpy.around(a,decimals) 函数返回指定数字的四舍五入值
# decimals: 舍入的小数位数。 默认值为0。 如果为负,整数将四舍五入到小数点左侧的位置
# numpy.floor() 返回数字的下舍整数。
# numpy.ceil() 返回数字的上入整数。
a=np.array([1.0,4.55,123,0.657,25.323])
print(np.around(a))
print(np.around(a, decimals=1))
print(np.around(a, decimals=-1))
print(np.rint(a))
print(np.floor(a))
print(np.ceil(a))
算术函数
# 算术函数:如果参与运算的两个对象 都是ndarray,并且形状相同,那么会对位彼此之间进行(+ - * /)运算。NumPy 算术函数包含简单的加减乘除: add(),subtract(),multiply() 和 divide()。
# 算术函数的使用
a=np.arange(9,dtype=np.float32).reshape(3,3)
b=np.array([10,10,10])
print(np.add(a,b))
print(np.subtract(a,b))
print(np.multiply(a, b))
print(np.divide(a, b))
# 算术函数中out参数的使用
x=np.arange(5)
y=np.empty_like(x)
np.multiply(x,10,out=y)
print(y)
# mod()函数的使用
# numpy.mod() 计算输入数组中相应元素的相除后的余数。函数
# numpy.remainder() 也产生相同的结果。
a=np.array([10,10,30])
b=np.array([3,5,7])
print(np.mod(a, b))
print(np.remainder(a, b))
统计函数
方法 | 说明 |
---|---|
np.sum() | 求和 |
np.prod() | 所有元素相乘 |
np.mean() | 平均值 |
np.std() | 标准差 |
np.var() | 方差 |
np.median( | 中数 |
np.power() | 幂运算 |
np.sqrt() | 开方 |
np.min() | 最小值 |
np.max() | 最大值 |
np.argmin() | 最小值的下标 |
np.argmax() | 最大值的下标 |
np.cumsum() | 对数组中元素累积求和,可指定轴 |
np.cumprod() | 对数组中元素累积求积,可指定轴 |
np.ptp() | 计算一组数中最大值与最小值的差,可指定轴 |
np.unique() | 删除数组中的重复数据,并对数据进行排序 |
np.nonzero() | 返回数组中非零元素的索引 |
power() | 函数的使用 |
x=np.arange(1,5)
y=np.empty_like(x)
np.power(x,2,out=y)
print(y)
# median ()函数的使用
a=np.array([4,2,1,5])
print(np.median(a))#计算偶数个的中位数
a=np.array([4,2,5])
print(np.median(a))#奇数个的中位数
a=np.arange(1,16).reshape(3,5)
print(np.median(a))
print(np.median(a,axis=0))#中间行
print(np.median(a,axis=1))#中间列
#mean函数的使用
a=np.arange(1,11).reshape(2,5)
print(np.mean(a))
print(np.mean(a,axis=0))
print(np.mean(a,axis=1))
# 函数的使用
a = np.random.randint(10,50,size=20)
np.max(a)
np.sum(a)
np.min(a)
np.max(a)
np.ptp(a)
np.unique(a)
np.nonzero(a)
其他常用函数
方法 | 说明 |
---|---|
np.tile() | 将数组的数据按照行列复制扩展 |
np.repeat() | 将数组中的每个元素重复若干次 |
roll() | 沿指定轴对数组元素进行移位 |
resize() | 重新调整数组的大小 |
place()/put() | 将数组中满足条件的元素/指定的元素替换为指定的值 |
np.savetxt() | 将数据保存到txt文件中 |
np.loadtxt() | 从文件中加载数据 |
np.genfromtxt() | 根据文件内容中生成数据,可以指定缺失值的处理等 |
np.any() | 如果数组中存在一个为True的元素(或者能转为True的元素),则返回 |
np.all() | True如果数组中所有元素都为True(或者能转为True的元素),则返回True |
np.where(条件,x,y) | 如果条件为True,对应值为x,否则对应值为y |
np.dot() | 将矩阵相乘 |
np.sort() | 对数组进行排序,返回一个新的排好序的数组,原数组不变 |
np.sort() | 返回的是数组值从小到大排序后元素对应的索引值 |
# tile()和repeat()函数的使用
a=np.arange(4)
np.tile(a,2)##复制2次
np.tile(a,(3,2))#行列复制
print(np.repeat(a, 2))
a=np.arange(1,13).reshape(3,4)
np.repeat(a,2)
print(np.repeat(a, 2, axis=0))
print(np.repeat(a, 2, axis=1))
# roll()函数的使用
b=np.arange(12)
print(np.roll(b, 3))#一维数组,向后调3个
print(np.roll(b, -1))#向前调2个
aa=np.arange(1,13).reshape(3,4)
print(np.roll(aa, 2))
print(np.roll(aa, 2, axis=0))
# resize()函数的使用
aa.reshape(4,3)#修改维度,元素个数必须相同
np.resize(aa,(5,6)) #resize重新调整数组的大小,元素个数可以不相同
# replace()和put()函数的使用
aa=np.random.randint(40,100,(3,4))
np.place(aa,aa<60,0)##小于60分的 全部替换为0
aa=np.arange(1,13).reshape((3,4))
np.put(aa,2,100)#put()指定的索引处的元素替换为指定的值
# savetxt()和loadtxt()函数的使用
a=np.random.randint(-50,100,1000)
#保存
np.savetxt('savetxt.txt',a,fmt='%d')
#加载
b=np.loadtxt('savetxt.txt',dtype=int)
# any()、all()函数的使用
x=np.array([False,True,False,1,0,True])
np.any(x)#any函数 只要有一个元素为True,则结果返回True
np.all(x)#all函数 只有所有元素都为True,则结果返回True
# where()函数的使用
np.random.seed()
a=np.random.randint(20,100,10)
print(a)
print(np.where(a>50,True,False))
# dot函数的使用
x=np.array([[1,2],[3,4]])
y=np.array([[2,3],[1,2]])
x.dot(y)#dot函数 矩阵相乘 矩阵相乘前提是,第一个矩阵的列数和第二个矩阵的行数要相同
x.dot(3) #每个元素与3相乘
数组排序
# 数组排序:排序中主要用到的方法是np.sort和np.argsort。其中np.sort()是对数组直接排序。而np.argsort()是返回排序后的原始索引。
# 一维数组排序
a=np.array([5,2,4,5,7,3,8])
print(np.sort(a))
print(np.argsort(a))#np.argsort()是返回排序后的原始索引。
# 二维数组排序
np.random.seed(44)
a=np.random.randint(100,size=(4,6))
print(np.sort(a))
print(np.sort(a,axis=0))#上行比下行小
print(np.sort(a,axis=1))#左列比右列小
# 按最后一列进行排序
b=a[:-1]
print(b)#可以先获取最后一列的数组
index=np.argsort(b)#获取最后一列数组排序后的原始索引
numpy广播机制
# 广播的规则
# 1,如果两个数组维度个数不同,那么小维度的数组形状会在左边补1
# 2,如果两个数组形状在任何一个维度上都不匹配,数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状
# 3,如果没有维度形状为1,则会引发异常两个数组相加
# 0 1 2 0 0 0
# 0 1 2 1 1 1
# 0 1 2 2 2 2
a=np.array([0,1,2])
print(a+5)
b=np.array([2,2,2])
print(a+b)
# 维度不相同的数组相加
a=np.arange(3)
b=np.arange(3).reshape(3,1)
print(a+b)
比较掩码
# 比较掩码:比较操作,会返回与参与运算数组形状相同的数组,其中,满足条件的为True,不满足的为False
# 数组的比较操作
a=np.array([[1,2,39],[34,45,67]])#传入的数组,需要和a形状一致,且类型为Bool类型,这个叫做掩码式索引
print(a<50)
# 掩码式索引取值,过滤掉不符合条件的
print(a[np.array([[True,True,True],[True,True,False]])])
print(a[a<50])
作者:夜清寒风