numpy用法汇总

numpy基本用法汇总

  • 前言
  • 数组的创建
  • numpy的矩阵计算
  • 切片与索引
  • 通用函数
  • 数组的增加,插入,删除,合并
  • 数组的集合函数
  • 数组排序
  • 文件读写

前言

之前学习了numpy的一些方法和用法,觉得要记的东西太多,自认为学的有点杂乱,所以总体汇总整理了一下,全部是用表个整理的,看起来会很清晰吧!

数组的创建

多维数组(矩阵ndarray)
ndarray的基本属性

shape 维度的形状大小#4*5
ndim维度的个数     #3维
dtype数据类型      #int32
关键词 举例 解释
随机创建数组
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文件元素用逗号隔开

你可能感兴趣的:(数据分析)