前言
之前学习了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文件元素用逗号隔开 |