numpy基本用法汇总
- 前言
- 数组的创建
- numpy的矩阵计算
- 切片与索引
- 通用函数
- 数组的增加,插入,删除,合并
- 数组的集合函数
- 数组排序
- 文件读写
前言
之前学习了numpy的一些方法和用法,觉得要记的东西太多,自认为学的有点杂乱,所以总体汇总整理了一下,全部是用表个整理的,看起来会很清晰吧!
数组的创建
多维数组(矩阵ndarray)
ndarray的基本属性
shape 维度的形状大小
ndim维度的个数
dtype数据类型
关键词 |
举例 |
解释 |
随机创建数组 |
|
|
rand() |
np.random.rand(3,4,5) |
取值范围在0~1之间 长宽4*5,厚度是1的三维数组 |
randint() |
np.random.randint(-10,10,5) |
取值范围是-10~10的整数,个数是5的一维数组 |
randint() |
np.random.randint(-10,10,(4,5)) |
取值范围是-10~10的整数,个数是4*5的二维数组 |
uniform() |
np.random.uniform(10,20,3) |
取值范围10~20的小数,个数是3的一维数组,多维同上 |
序列创建数组 |
|
|
array() |
np.array([3,4,5,6,7]) |
列表创建数组 取值范围是列表的值,多个元素个数相同的列表可组成多维数组 |
zeros() |
np.zeros((3,4)) |
取值范围是0,是一个3*4的二维数组 |
ones() |
np.ones((3,4)) |
取值范围是1,是一个3*4的二维数组 |
arange().reshape() |
np.arange(10).reshape(2,5) |
前面是取值范围,后面是数组的形状,取值范围的个数必须和数组个数一致 |
打乱顺序,重新排序 |
|
|
shuffle() |
1. nd9 = np.arange(10), 2. nd10 = np.random.shuffle(nd9), 3. print(nd9) |
这个函数是在原来的基础上排列,没有返回值 |
数据类型转换 |
|
|
astype() |
np.arange(10,dtype(np.int64)).astype(np.float64) |
将int64转为float641、astype()不在原始数组做操作,有返回值,返回的是更改数据类型的新数组2、在创建新数组的过程中,有dtype参数进行指定 |
numpy的矩阵计算
arr1 = np.arange(11,21)
arr2 = np.array([6,9,54,4,1,5,5,2,3,6])
arr3 = np.array([2,4,6,8,10])
arr4 = 10
arr5 = np.random.randint(10,20,(2,5))
arr6 = np.random.uniform(0,10,(2,5))
arr7 = np.random.rand(5)
关键词 |
举例 |
解释 |
相加(下标相同的相加) |
|
|
数组和单个数字相加 |
arr1+arr4 |
数字和每个数组元素相加,返回一个新的数组 |
数组和数组相加 |
arr1+arr2 |
两个数组下标相同的元素相加,返回一个新的数组(注:两个数组元素个数必须一样) |
相乘 |
|
|
数组和单个数字乘 |
arr5*arr4 |
数字和每个数组元素相乘,返回一个新的一维数组 |
一维数组和多维数组相乘 |
arr5*arr7 |
数组列数必须相同,列数相同的相乘)返回一个新的多维数组 |
多维维数组和多维数组相乘 |
arr5*arr6 |
数组的维度和形状大小必须一样 |
切片与索引
arr1 = np.arange(10)
arr3 = np.random.randint(0,99,(4,5))
arr4 = np.array([
[2010,2011,2012],
[2013,2014,2015],
[2019,2020,2021]
])
关键词 |
举例 |
解释 |
一维数组 |
|
|
取单个数据 |
arr1[2] |
取下标为2的元素 |
取连续多个数据 |
arr1[0:3] |
取下标0~3的元素 (注意:不包括3) |
取不连续多个数据 |
arr1[0:8:2] |
取下标0~8,步长为2的元素 (注意:不包括8) |
多维数组 |
|
|
取单独一行 |
arr3[0] |
|
取单独一列 |
arr3[:,3] |
|
取单独一行中的一列(单个数据) |
arr3 [0,2] 或 arr3[0][2] |
|
取连续多行 |
arr3[0:3] |
|
取不连续多行 |
arr3[[0,3]] |
|
取连续多列 |
arr3[:,0:3] |
|
取不连续多列 |
arr3[:,[0,3]] |
|
取连续多行多列 |
arr3[0:3,0:3] |
|
取连续多行不连续多列 |
arr3[0:3,[0,3]] |
|
取不连续多行不连续多列 |
arr3[[0,3]][:,[0,3]] |
|
条件索引 |
与(&) 或(竖) 非(~) |
|
比较 |
arr4>2013 |
返回的是一个布尔值的数组 True 和 False |
取值 |
arr4[(arr4>2013)] |
返回的是一个符合条件的一维数组 |
与 取值 |
arr4[(arr4<2016)&(arr4>2013)] |
返回的是一个符合条件的一维数组 |
或 取值 |
arr4[(arr4>2019)竖(arr4<2013)] |
返回的是一个符合条件的一维数组 |
组合取值 |
arr4[((arr4%4 == 0)&(arr4%100!=0))竖(arr4%400==0)] |
返回的是一个闰年年份的数组 |
数组转列表 |
|
|
第一种 |
list(arr4) |
结果:[array([2010, 2011, 2012]), array([2013, 2014, 2015]), array([2019, 2020, 2021])] |
第二种 |
arr4.tolist() |
结果:[[2010, 2011, 2012], [2013, 2014, 2015], [2019, 2020, 2021]] |
通用函数
arr1 = np.random.randint(-5,10,(4,5))
arr2 = np.arange(10,20).reshape((2,5))
arr3 = np.arange(10,20).reshape((2,5))
arr4 = np.arange(10,20).reshape(2,5)
arr5 = np.arange(20,30).reshape(2,5)
arr6 = np.arange(1,50).reshape(7,7)
arr7 = np.random.shuffle(arr6)
arr8 = np.random.randint(0,50,(4,4))
关键词 |
举例 |
解释 |
一元计算函数 |
|
|
向上取整 |
np.ceil(arr1) |
例: 3.1 —> 4 |
向下取整 |
np.floor(arr1) |
例: 3.9 —> 3 |
四舍五入 |
np.rint(arr1) |
例: 3.5 —> 4 |
绝对值 |
np.abs(arr1) |
例: -3.5 —> 3.5 |
取反 |
np.negative(arr1) |
例: 3.5 —>-3.5 , 4.2 —> -4.2 |
平方 |
np.square(arr1) |
例: 2—> 4 , 5 —> 25 |
平方根 |
np.sqrt(np.abs(arr1)) |
因为负数没有平方根,所以加了绝对值 |
判断是否有空值 |
np.isnan(arr1) |
返回的是布尔值的数组 True 和 False |
分成小数和整数 |
np.modf(arr1)[0] 和 np.modf(arr1)[1] |
[0] 代表小数,[1]代表整数 |
二元计算函数 |
数组元素个数和形状大小应该相同 |
|
加 |
np.add(arr2,arr3) |
返回一个下标相同元素相加的新数组 |
减 |
np.subtract(arr2,arr3) |
返回一个下标相同元素相减的新数组 |
乘 |
np.multiply(arr2,arr3) |
返回一个下标相同元素相乘的新数组 |
除 |
np.divide(arr2,arr3) |
返回一个下标相同元素相除的新数组 |
三元计算函数 |
where(condition, x=None, y=None)根据条件,返回x,y 中的一个 |
条件表达式,原始数据,不符合条件 |
根据条件替换 |
np.where(arr5%2==0,arr5,100) |
条件表达式,原始数据,不符合条件要替换的数据,效果:[[ 20 100 22 100 24][100 26 100 28 100]] |
例子 |
np.where((np.rint(arr5)>20)&(np.rint(arr5)<30),100,arr5) |
四舍五入之后大于20小于30的数字,改为100 |
常用的元素统计函数 |
|
|
求平均值 |
np.mean(arr6) |
返回的是一个平均数(单个值) |
求和 |
np.sum(arr6) |
返回的是一个总和值(单个值) |
最大值 |
np.max(arr6) |
返回的是一个最大值(单个值) |
最小值 |
np.min(arr6) |
返回的是一个最小值(单个值) |
标准差 |
np.std(arr6) |
返回的是一个标准差(单个值) |
方差 |
np.var(arr6) |
返回的是一个方差(单个值) |
最大的下标索引 |
np.argmax(arr7,axis=0) |
返回的是一个索引(单个值) |
最小值的下标索引 |
np.argmin(arr6) |
返回的是一个索引(单个值) |
所有元素都式之前的累加 |
np.cumsum(arr6) |
返回的是一个累加的数组 |
所有元素都式之前的累乘 |
np.cumprod(arr6) |
返回的是一个累乘的数组 |
判断函数 |
all---->全部符合条件返回True,否则返回False,any—>只要有一个符合条件的就返回True. |
没有行列的限制,返回单个True,和False,有行列的限制,返回每行或者列的True,和False, |
all |
np.all(arr5>20,axis=1) |
每一行的每一列全部符合条件的显示True |
any |
np.any(arr5>10,axis=0) |
每列只要有一个数符合条件就显示True |
数组的增加,插入,删除,合并
arr1 = np.arange(10,20)
arr2 = np.arange(20,30)
arr3 = np.arange(20).reshape(4,5)
arr4 = np.arange(20).reshape(4,5)
arr5 = np.array([1,1,1,1,1])
arr6 = np.array([1,1,1,1])
关键词 |
举例 |
解释 |
增加 |
np.append() |
|
一维数组追加一个数 |
np.append(arr1,100) |
返回一个一维数组 |
一维数组追加一个一维数组 |
np.append(arr1,arr2) |
返回一个一维数组 |
多维维数组追加一个数 |
np.append(arr3,100) |
返回一个一维数组 |
多维维数组追加一个一维数组 |
np.append(arr3,arr1) |
返回一个一维数组 |
多维维数组追加一个多维数组 |
np.append(arr3,arr4) |
返回一个一维数组 |
插入 |
np.insert() |
原数组,要插入的下标位置,要插入的数据 |
一维数组插入一个数 |
np.insert(arr1,0,100) |
返回一个数组 |
多维维数组插入一个数 |
np.insert(arr3,0,100) |
返回一个一维数组 |
一维数组插入一个一维数组 |
np.insert(arr1,0,arr2) |
返回一个一维数组 |
一维维数组插入一个列表 |
np.insert(arr1,0,[100,200]) |
返回一个一维数组 |
多维维数组插入一个列表 |
np.insert(arr3,0,arr5,axis=0) |
返回一个一维数组,在每列的第一个插入 |
多维维数组插入一个列表 |
np.insert(arr3,0,arr6,axis=1) |
返回一个一维数组,在每行的第一个插入 |
删除 |
np.delete() |
|
一维数组删除一个元素 |
np.delete(arr1,0) |
返回一个一维数组 |
多维数组删除一行 |
np.delete(arr3,0,axis=1) |
|
多维数组删除一列 |
np.delete(arr3,0,axis=0) |
|
合并 |
np.concatenate() |
|
一维数组合并 |
np.concatenate((arr1,arr2)) |
返回一个一维数组 |
按列合并 |
np.concatenate((arr3,arr4),axis=0) |
axis=0 按照列合并,增加的是多行数据 |
按行合并 |
np.concatenate((arr3,arr4),axis=1) |
axis=1 按照行合并,增加的是多列数据 |
数组的集合函数
s1 = {10,20,30,40}
s2 = {10,100,20,200}
arr1 = np.arange(10,20)
arr2 = np.arange(0,5)
arr3 = np.array([100,10,10,10,20,30,40,50,1])
关键词 |
举例 |
解释 |
集合 |
|
|
交集 |
s1&s2 |
返回相同元素的集合,没有就返回空集合 |
并集 |
s1竖s2 |
两集合合并 |
数组 |
|
|
数组去重 |
np.unique(arr3) |
返回一个没有重复元素的集合 |
数组交集 |
np.intersect1d(arr1,arr3) |
返回返回相同元素的数组 |
数组并集 |
np.intersect1d(arr1,arr3) |
返回一个合并的数组 |
数组差集 |
np.setdiff1d(arr1,arr2) |
两个数组相减,前面是减数,后面是被减数 |
对称差集,二者差集的集合 |
np.setxor1d(arr1,arr3) |
并集减差集 |
判断数组是否包含元素 |
np.in1d(arr1,arr3) |
后面数组的元在不在前面数组里面,返回一个True和False数组 |
数组排序
arr1 = np.arange(10,20)
arr2 = np.arange(0,5)
arr3 = np.array([100,10,10,10,20,30,40,50,1])
关键词 |
举例 |
解释 |
第一种 |
np.sort(arr1) |
复制一份再排序,升序 |
第二种 |
arr1.sort(axis=-1) |
原来的基础上排序无返回值还是升序 |
文件读写
arr1 = np.arange(20).reshape(4,5)
arr2 = np.arange(20).reshape(4,5)
arr3 = np.array([
['col1','col2','col3'],
['java','python','php'],
['mysql','redis','mongodb']
])
关键词 |
举例 |
解释 |
保存 |
|
|
二进制保存 |
np.save(‘a1’,arr1) |
保存可不写结尾 |
键值保存(更容易读取) |
np.savez(‘test’,nd1 = arr1,nd2 =arr2) |
多个的话键值结构更好取 |
读取 |
|
|
二进制读取 |
arr3 = np.load(‘a1.npy’) |
load 将二进制转为数组 |
键值取 |
np.load(‘test.npz’) |
前提是要是键值存的,多个的话键值结构更好取 |
指定文件读取 |
np.savetxt(‘aaa.csv’,arr1,delimiter=’,’,fmt=’%s’) |
参数(要保存的文件 被保存的数据 以逗号分隔 文件格式)注意:csv文件元素用逗号隔开 |