ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

NumPy 零基础学习笔记

NumPy 零基础学习笔记 前言学 Python 做数据分析、机器学习绕不开 NumPy。Python 自带的列表做大批量数值运算效率很低NumPy 底层是 C 写的专门用来处理多维矩阵数据Pandas、Matplotlib、很多机器学习库底层都依赖它。很多同学刚上手会被一堆函数搞晕我把日常最常用的操作整理成笔记全部都是实际敲过的代码跟着跑一遍就能理解。安装如果还没装pip install numpy所有代码第一行基本都是导入行业惯例简写为 np。import numpy as np1. 创建 ndarray 数组ndarray 就是 numpy 里面的数组对象可以理解成增强版列表支持一维、二维、三维甚至更高维CSDN博...。1.1 从普通列表转换list1 [1,2,3,4,5] # 一维数组 v np.array(list1) print(v) # 二维数组多个一维数组嵌套 m np.array([list1,list1,list1]) print(m) # 三维数组多个二维数组嵌套 z np.array([m,m,m]) print(z)1.2 快速生成特殊数组# 生成全0数组 a np.zeros((2,3)) # 生成全1数组 b np.ones((3,3)) # 全部填充指定数字 c np.full((2,2), 5) # 单位矩阵 d np.eye(5) print(a,b,c,d)1.3 生成有规律的数据np.arange(start,end,step)左闭右开和 range 很像np.linspace(start,end,nums)闭区间均匀取 n 个点r1 np.arange(0,9,3) print(r1) # 0到1一共21个点 r2 np.linspace(0,1,21) print(r2)2. 查看数组基础属性拿到一个陌生数组先看这几个属性搞清楚它长什么样.shape数组形状几行几列.ndim维度1 维 / 2 维 / 3 维.size总元素个数.dtype元素的数据类型int、float 等arr np.array([[1,2,3],[4,5,6]]) print(arr.shape) print(arr.ndim) print(arr.size) print(arr.dtype)3. 数组维度变换升维、降维reshape () 修改形状注意reshape 不会改变原数组返回新数组-1代表让 numpy 自动计算该维度大小。v np.array([1,2,3,4,5,6,7,8]) # 一维转二维 r1 v.reshape(2,4) # -1自动算 r2 v.reshape(4,-1) print(r1)resize()和 reshape 不一样resize 直接修改原始数组没有返回值v.resize(4,2) print(v)高维降一维ravel () 和 flatten ()两个都可以把多维数组压扁成一维但有坑面试经常考ravel()尽量返回视图修改返回的数组有可能改动原数组省内存flatten()一定返回副本修改返回值不会影响原数组更安全v np.array([[1,2],[3,4]]) r1 v.ravel() r2 v.flatten() print(r1) print(r2)4. 数组元素选取和修改索引切片是高频操作一维、二维、三维写法略有区别。一维数组array1 np.arange(1,9) # 取单个 print(array1[1]) # 花式索引取多个不连续 print(array1[[1,3,5]]) # 切片左闭右开 print(array1[0:6]) # 修改 array1[0] 100 array1[[1,3]] 20 print(array1)二维数组逗号隔开前面是行后面是列array1 np.arange(24).reshape(4,6) # 某一个元素 第二行第五列 print(array1[1,4]) # 取一整行 print(array1[3,:]) # 取一整列 print(array1[:,3]) # 不连续的行 print(array1[[0,2],:]) # 修改 array1[1,4] 999 print(array1)三维数组格式[第几个二维矩阵行列]array1 np.arange(48).reshape(2,4,6) # 第一个二维数组第1行全部列 print(array1[0,1,:]) # 第二个二维数组全部行第2列 print(array1[1,:,1])5. 数组的拼接与切割拼接组合数组hstack()水平拼接左右拼增加列等价于concatenate(axis1)vstack()垂直拼接上下拼增加行等价于concatenate(axis0)array1 np.arange(9).reshape(3,3) array2 array1 * 2 # 水平左右放一起 a3 np.hstack((array1,array2)) # 垂直上下摞起来 a7 np.vstack((array1,array2)) # concatenate通用拼接axis控制方向 a6 np.concatenate((array1,array2),axis1) a8 np.concatenate((array1,array2),axis0) print(a3) print(a7)切割拆分数组hsplit水平切按列切vsplit垂直切按行切split(arr,份数,axis)通用切分array_split可以不均等切割份数不能整除数组长度的时候不会报错array1 np.arange(16).reshape(4,4) # 水平切成2份 a np.hsplit(array1,2) # 垂直切成2份 c np.vsplit(array1,2) # 强制分成3份不能整除也可以运行 e np.array_split(array1,3,axis1) print(a)6. 拷贝赋值、浅拷贝、深拷贝这个坑非常多人踩简单说直接用赋值只是别名两个变量指向同一块内存改一个另一个跟着变.copy()才是真正复制一份独立数组深拷贝array1 np.array([1,2,3]) # 只是别名不是复制 array2 array1 array2[0] 100 print(array1) # array1也被改变 # copy真正拷贝 array3 array1.copy() array3[0] 10 print(array1) # 原始数组不受影响7. 数组算数运算numpy 数组的加减乘除默认是对应位置元素逐个运算不是矩阵乘法要求两个数组 shape 尽量匹配。array1 np.arange(1,5).reshape(2,2) array2 array1 * 2 print(array1 array2) print(array1 - array2) print(array1 * array2) # 对应元素相乘不是矩阵点乘 print(array1 / array2) print(array2 % array1) # 取余注意⚠️矩阵真正的点乘线性代数矩阵乘法使用dot()a1 array1.dot(array2) a2 np.dot(array1,array2) print(a1)矩阵求逆在np.linalg线性代数模块inv_mat np.linalg.inv(array1)8. 常用统计函数可以指定axisaxis0按列计算axis1按行计算arr np.random.normal(size(3,3)) print(arr.mean()) # 均值 print(arr.sum()) # 求和 print(arr.std()) # 标准差 print(arr.var()) # 方差 print(np.median(arr)) #中位数 print(arr.sum(axis0)) #每一列求和 print(arr.sum(axis1)) #每一行求和9. numpy 随机模块写模拟、生成测试数据经常用到。# 设置随机种子保证每次运行随机结果一样 np.random.seed(100) # 随机整数 [low,high) r1 np.random.randint(0,10,size(5,5)) print(r1) # 0~1之间浮点数 r2 np.random.rand(3,3) print(r2) # 正态分布loc均值 scale标准差 r3 np.random.normal(loc5,scale2,size(2,2)) print(r3)10. 文件读写处理真实数据经常需要读取 txt 文本。np.loadtxt()读取文本delimiter指定分隔符比如制表符\t、逗号,。savetxt把数组保存成文本文件。# 读取制表符分隔的txt文件 data np.loadtxt(datingTestSet2.txt, delimiter\t) print(data) # 保存数组到文件 arr np.array([[1,2,3],[4,5,6]]) np.savetxt(array.txt,arr)最后以上就是我练习 numpy 敲的大部分基础代码。很多初学者一上来就死记一堆函数名其实不用。记住几个关键点numpy 数组所有元素数据类型统一搞懂 shape、维度、axis0 列 1 行分清视图和副本ravel和flatten、直接赋值和copy()分清元素相乘*和矩阵点乘dot()把上面这些练熟再去学 pandas、机器学习预处理就顺畅很多。如果对你有帮助欢迎点赞收藏后续会更新 pandas 学习笔记。补充小提示遇到报错优先检查数组 shape 是否匹配、axis 有没有搞反、切片是不是越界、有没有忘记 copy 导致原数组被意外修改。
返回列表