【新手放心进】Numpy 零基础超全入门教程,从安装到矩阵运算一站式学会

【新手放心进】Numpy 零基础超全入门教程,从安装到矩阵运算一站式学会 Numpy 零基础超全入门教程从安装到矩阵运算一站式学会文章目录Numpy 零基础超全入门教程从安装到矩阵运算一站式学会前言一、NumPy 安装1. pip 安装推荐2. 导入规范二、numpy 核心ndarray 数组创建1. 由Python列表转为数组2. 创建特殊的数组3. 数组的降维三、ndarray 常用核心属性四、三维数组元素的选取与修改五、数组的算法运算六、常见报错解决方案1. ModuleNotFoundError: No module named numpy2. reshape 报错3. 点乘形状不匹配报错总结前言在Python数据分析、机器学习、人工智能以及科学计算领域NumPy是绝对的基石库。全称Numerical Python它提供高性能的多维数组对象ndarray运算速度比Python原生列表快几十甚至上百倍后续学习Pandas、Matplotlib、机器学习框架都必须先掌握NumPy基础。一、NumPy 安装1. pip 安装推荐打开PyCharm终端、CMD或PowerShell执行国内镜像安装速度更快pipinstallnumpy-ihttps://pypi.tuna.tsinghua.edu.cn/simple只有安装了 numpy 库我们才能进行后续的运算。2. 导入规范所有NumPy代码标准导入写法行业统一惯例importnumpyasnp我们引用numpy库后把它“重命名”为np方便我们后续在代码中使用。二、numpy 核心ndarray 数组创建NumPy所有操作都基于ndarray多维数组常用创建方式如下。1. 由Python列表转为数组在python中最常见的数据类型就是列表但是我们需要转为更有效率的形式。我们可以观察到有列表转为数组后数据的形式改变了同时数组里没有逗号存在importnumpyasnp ls[1,2,3,4,5,6,7,8,9]print(ls)anp.array(ls)print(a)输出结果为[1,2,3,4,5,6,7,8,9][123456789]这样做的好处将numpy依托底层C语言实现与连续内存存储运算速度远超原生列表天生支持一维、二维、多维矩阵结构可灵活通过reshape变换维度适配各类矩阵场景内置完善的线性代数能力自带点乘、矩阵乘法等运算无需手动编写复杂逻辑同时支持向量化批量运算无需编写for循环就能对全体元素统一计算代码更简洁高效也是后续Pandas、数据分析及机器学习学习的必备基础。上方的代码只是最简单的一维数组往上还有更高维的数组那是就将以矩阵的形式展现但他们本质还是数组。importnumpyasnp ls_2[[1,2],[3,4]]print(ls_2)a_2np.array(ls_2)print(a_2)输出结果[[1,2],[3,4]][[12][34]]2. 创建特殊的数组在项目开发中我们可以根据我们的需要创建一些特殊的数组比如全是0的数组、全是1的数组等等等等。importnumpyasnp#创建全为0的数组anp.zeros(5)bnp.zeros((2,2))#(2,2)np.zeros((2,2))#zeros只能接受1个参数cnp.zeros((3,2,2))print(a,\n,b,\n,c)#创建全为1的数组dnp.ones(5)enp.ones((2,2))fnp.ones((2,2,2))#创建全为2的数组 矩阵中全部填充指定的数据gnp.full((2,2,2),5)运行结果[0.0.0.0.0.][[0.0.][0.0.]][[[0.0.][0.0.]][[0.0.][0.0.]][[0.0.][0.0.]]]3. 数组的降维对numpy数组做降维非常有必要高维数组结构层级复杂、不利于数据查看和取值索引降维后能把多层嵌套的结构摊平成一维或二维更方便做遍历遍历、切片取值和数据筛选降维后还能适配大多数数据分析、绘图、模型输入的格式要求很多算法和函数只接收一维或二维结构高维数据无法直接使用同时降维后运算逻辑更简单避免多维索引出错简化矩阵运算、批量计算的代码写法也能配合后续pandas数据转换、数据预处理等操作让数据处理流程更顺畅、更易维护。importnumpyasnp list1[1,2,3,4,5,6,7,8]vnp.array(list1)vv.reshape(2,2,2)print(v)v.ndim#将三维降到二维r1v.reshape(1,8)print(r1)r1.ndim#将高维数据转化为一维#ravel()r2v.ravel()print(r2)#flatten()r3v.flatten()#非常重要print(r3)# flatten方法返回的是原数组的副本这意味着对返回的一维数组所做的任何修改都不会影响原始的多维数组。# ravel方法如果可能返回的是原始数组的视图因此对返回的一维数组所做的修改可能会影响原始的多维数组。这是因为ravel只是改变了数组的形状和步长而没有复制数据。list1[1,2,3,4,5,6,7,8]vnp.array(list1)print(v)三、ndarray 常用核心属性掌握ndim、shape、size、dtype这几个numpy数组核心属性就能一眼看懂数组是几维结构、行列形状、元素总个数以及数据类型快速读懂数组整体结构为后续维度变换、矩阵运算和数据预处理打下基础。anp.arange(4).reshape(2,2)print(a)print(维度个数,a.ndim)# 几维数组print(数组形状,a.shape)# (行数,列数)print(元素总个数,a.size)print(元素数据类型,a.dtype)其中第一行代码就是说在0~4不包括4的范围取四个元素且生成2*2的数组。运行结果[[01][23]]维度个数2数组形状(2,2)元素总个数4元素数据类型 int32四、三维数组元素的选取与修改三维数组按 块、行、列 三层索引取值格式 [块,行,列]既能精准选取单个元素、整行、整块也能直接通过索引重新赋值修改元素操作逻辑和一维、二维数组完全贯通只需要多一层块的索引即可。代码都可以直接运行可以在自己的pycharm中运行试验。importnumpyasnp array1np.arange(48).reshape(2,4,6)print(array1)#选取某个元素#首先确定选取哪一个二维数组aarray1[1,0,0]#选取某行元素barray1[0,1,:]#选取某些行元素carray1[0,1:3,:]darray1[0,[1,3],:]#选取某列earray1[1,:,1]#选取某些列farray1[1,:,1:4]garray1[1,:,[1,4]]#修改array1[1,0,0]100print(array1)vnp.array([array1,array1,array1,array1])av[2,1,2:,1:3]print(a)五、数组的算法运算数组之间的运算方式基本都是两个格式、维度形状完全一致的numpy数组在一一对应的相同位置逐个元素做加减乘除等运算不用循环遍历numpy会自动按位置匹配批量计算这也是数组运算简洁高效的核心原因。importnumpyasnp array1np.arange(1,5,1).reshape(2,2)array22*array1print(array1)print(array2)#数组的加法【对应位置的元素求和】print(array1array2)#前提 矩阵shape必须一致#数组的减法[对应位置元素相减]print(array1-array2)#数组的乘法【对应位置相乘】print(array1*array2)#数组的除法[对应位置相除]print(array1/array2)#数组的取余(%)print(array2%array1)#数组的取整print(array1//array2)运行结果[[12][34]][[24][68]][[36][912]][[-1-2][-3-4]][[28][1832]][[0.50.5][0.50.5]][[00][00]][[00][00]]六、常见报错解决方案1. ModuleNotFoundError: No module named ‘numpy’原因未安装NumPy解决执行pip install numpy 清华镜像安装即可同理pandas、matplotlib都是缺少库导致。2. reshape 报错报错原因进行 reshape 重塑数组形状时新维度相乘后的元素总个数和原数组元素总数不相等无法分配结构直接触发报错。解决办法设置新维度时必须保证新各维度数值的乘积 原数组元素总个数只要总数对上就能正常完成维度重塑。3. 点乘形状不匹配报错原因numpy数组进行点乘是按对应位置逐元素运算要求两个数组行列、维度结构完全一致若形状、行列数不统一就无法一一对应匹配元素直接触发报错。解决提前通过reshape调整数组维度与行列结构把两个数组改成相同形状后再进行点乘运算。总结围绕 numpy 零基础入门展开涵盖 numpy 安装方法与导入规范详细讲解了 ndarray 数组的多种创建方式列表转数组、特殊数组创建、核心属性ndim、shape、size、dtype、数组的降维与三维数组的元素选取和修改以及数组间的对应位置运算规则同时整理了安装、reshape、点乘相关的常见报错及解决办法全程附带可直接运行的代码帮助新手快速掌握 numpy 基础numpy不用死记硬背多敲代码多练习就可以应对日常学习和工作中的基本使用场景。如果这篇文章对你有帮助请点个赞和收藏博主会继续努力更新文章的。