python的 numpy库学习总结和介绍(超详细)模块

article/2025/9/10 8:41:07

目录

前言

numpy是什么?

一、创建数据容器

1.np.array(),通过传递一个列表,元祖来创建

2.np.zeros(),np.ones(),np.empty(),np.full(),传递对应的形状参数,来创建一个初始化的数组

3.np.linspace()与np.arange()的使用

4.运用np.random来创建随机数数组

5.数组的常见属性

二、操作数据容器

1.数组的变形

 2.数组的拼接

3.数组的分裂

三、读取和修改数据

1.下标索引

 2.切片索引

3.掩码索引(布尔型索引)

4.花哨的索引(有的书翻译成花式索引) 

 5.组合索引

6.数据的修改

 四、操作数据

1.通用函数

 2.聚合操作

 3.数组元素的排序

五.从线性代数的角度来使用numpy

1.矩阵的乘法

2.矩阵的转置和逆 

 3.numpy的多项式拟和---np.polyfit()

4.numpy求解线性方程组 ---np.linalg.solve()

六.数组的读取与存储



前言

        python作为一个胶水语言,如今在数值科学计算,数据分析,机器学习等方面作为一个常用的工具发挥着重要的作用,其中自然少不了python的numpy库的应用,今天我们就一起来探索numpy库对数据的相关操作与用法,也可以为后面pandas库和matplotlib库做好充分的准备基础

c28732571c48497c9dc3612efe54cf24.png

numpy是什么?

        numpy库是是用python进行数值计算、矩阵运算、数据处理、数据分析的常用库,也是进一步学习pandas库的基础,既然是去对数据进行处理,我把numpy对数据的操作归纳为四个部分来进行介绍,分别是1.创建数据容器 2.操作容器 3.读取与修改数据4.操作数据 。下面我们来对这四个部分来分别进行详细介绍

一、创建数据容器

        既然要分析数据,那我们肯定得先用一个容器把数据装起来吧,所以第一步就是创建数据容器。

1.np.array(),通过传递一个列表,元祖来创建

示例如下:

899db79a28d7427ca345840c323747fd.png

2.np.zeros(),np.ones(),np.empty(),np.full(),传递对应的形状参数,来创建一个初始化的数组

示例如下:

0d7d37730b084da991c0625273cea16b.png

3.np.linspace()与np.arange()的使用

6b39aca9e6b640d6a5467c08d25b9f1e.png

4.运用np.random来创建随机数数组

1.np.random.rand(),根据传入形状参数创建元素为来自[0,1)的随机数的数组

2.np.random.randn(),根据传入形状参数创建元素为满足标准正态分布的数组

3.np.random.random(),根据传入形状参数创建元素为来自[0,1)的随机数的数组

4.np.random.randint(),根据传入的取值范围和形状参数创建元素为来自范围内的随机整数的数组

5.np.random.normal(),根据传入的数学期望、方差和形状参数来创建元素满足对应正态分布的数组

2262acf343244dbd8ed97e96e8487235.png

 注意:np.random.rand()和np.random.randn为直接传入形状参数数字,不需要以元祖或者列表的形式去传入维数,且以上函数可以不传入任何参数使用,用来生成一个满足条件的随机数。

5.数组的常见属性

        数组常见的属性有四个:shape--形状,ndim--数组维度,size--数组元素的个数,dtype--数组元素的数据类型,示例如下:

e6c78aeedf074b8c9d09aeffe3b3c315.png

 其中的dtype属性一般最值得注意,因为数组只能存储一种数据类型,存在和C语言类似的强制数据类型转换,我们可以利用astype()方法传入想要转化的数据类型来进行操作,如下:

56b6581634d44a45946c43d709ef46ad.png

 注意:astype()方法并非原地修改,而是在不修改原数组的基础上返回一个新数组.

二、操作数据容器

        好了通过上面我们已经创建了我们的数据容器--数组,但是有时候我们可能需要把一个数据容器分割成多个数据容器,或者把多个数据容器合并成一个数据容器,这就要讲到操作数据容器,其中包括数据的变形与数组的拼接和分裂

1.数组的变形

        数组的变形主要是用数组的reshape()方法来实现,只需以数组或者列表的方法传入形状参数便会返回对应的数组(原数组并没有改变,且返回的数组是原数组的副本视图),示例如下:

5d0d9220878744849467c9bcfb04adcc.png

  注意:通过reshape()方法返回的为原数组的副本视图,即在返回数组上进行相关操作,都会反应在原数组上面,示例如下:

158d61e42fe84899b45d951d8358de55.png

这种返回副本视图的方式,有时候为我们做数据分析提供了一些便利,在后续数据分析的实战你会感觉的到,但是有时候你可能会想要避免这种情况,比如要用python进行一些矩阵相关的算法实现时,那么你可以使用python的copy方法,示例如下:

dc442a8d89194895834f4b85b6c63dc4.png

 2.数组的拼接

        数组的拼接就是将二个数组拼接在一起,主要是使用numpy库的concatenate()函数,它的第一个参数是传入一个列表或者元祖,里面包含着要进行拼接的数组,另外一个则是轴参数,axis,要详细的了解axis参数可以参考我的另一篇博客:对python的numpy库和pandas库相关方法和函数的axis参数的理解

下面直接在示例中对concatenate()函数进行介绍:

0acece0304ed42fdbad99d49ecaa136b.png

 另外numpy库还有二个用于数组拼接的函数,分别是hstack()函数--水平拼接,vstack--垂直拼接,他们只需要传入包含拼接数组的列表或者元祖即可,hstack相当于指定了axis=1,按列进行拼接,vstack相当于指定了axis=0,按行进行拼接,示例如下:

40d6799881d74b5cbae6f1bc20ff2e58.png

注意:concatenate()函数和hstack()函数、vstack()函数也是在不改变原数组的情况下返回原数组的副本视图,如果想要避免需要使用copy()方法进行拷贝后赋值。

3.数组的分裂

        数组的分裂就是根据指定的分裂点来对数据进行分裂,对于一维的数组通常使用numpy库的split()函数,他只需要二个个参数,一个是要进行分割的一维数组,另一个就是分割点(这里可能会用到一些数组取值的地方,如果不了解可以先看一下下面的“获取和修改数据”),示例如下:

8bf6710e029b41c6928f7c0bad93c6ec.png

 对于一维数组我们一般使用split()函数,对于二维我们一般使用hsplit()--水平分割和vstack()--垂直分割。对hsplit()函数,我们只需要传入要分割的数组和对应的分割列索引。对vsplit()函数,我们只需要传入要分割的数组和对应的分割行索引.示例如下:

94af4a0a5c9d4ebf9b77091684fa9192.png

注意:数组的分裂返回的数组也是原数组的副本视图。

三、读取和修改数据

        将数据用数据容器数组装起来以后,自然少不了数据的存取与修改了,接下来来介绍对数组中数据的读取与修改。

1.下标索引

        了解过其他编程语言的同学对下标索引应该十分熟悉,直接看示例:

42d28a22322a4eb9b39578ae295365af.png

 这些就是下标索引的常用方法,十分快捷有效,但是想要重分使用python的简洁与方便,可以使用python的切片对数据进行索引

 2.切片索引

        话不多说,直接上例子:

6e735379aaad4713bc1c24de013f7188.png

3.掩码索引(布尔型索引)

        所谓掩码就是通过传入一个布尔类型的数组来进行索引,会返回对应位置为True的元素

示例如下:

3eeb3fc041dc46d88e3e0636182cc26c.png

4.花哨的索引(有的书翻译成花式索引) 

        花哨索引是指传入一个数组,数组内包括要进行索引的数据对应的下标,返回的是一个新的数组(下标索引返回的是一个数据)

直接上例子:

e66778e5646f4b41825cf65926f6db97.png

 5.组合索引

        所谓组合索引就是将上面的四种索引方法组合起来使用,我们来看一下常用的组合索引例子:

4be436af8a8146698d926e44ef3fa306.png

 注意:上述索引方法,除花哨索引返回的是一个新的数组,其他索引方法返回的都是原数组的副本视图。

6.数据的修改

        有了数组的获取,修改就十分容易,只要对获取的数据进行重新赋值就可以,示例如下:

81b9c9410efa4ff6830ff0230244ef48.png

 四、操作数据

        对数据的操作,主要包括三个部分:通用函数,聚合,排序,下面来一一进行介绍

1.通用函数

        python的numpy库的数组运算是和R语言类似的,具有向量性,我们通过数组的加减乘除来说明这一点:

当二个数组形状相等时则就是二个数组对应位置的数据做对应的运算:

e9703ce6f2c545cb976953436711e1df.png

当二个数组形状不同是,则此时遵循广播规则,关于广播规则详细可以查看我的另外一篇博客:numpy库数组运算的广播规则,这里就简单看几个例子

4043e2932c844b5593748f9055e0a1c2.png

0aff1709ddab41aa8c08b188f98786f2.png

d541af08bc704454bc12c8b94793e067.png

 这里的+,-,*,/  其实是numpy库通用函数的简化形式,其具体及其补充应如下:

e269cf0ef61a48c9b5c6e2fbe6d60dfa.jpeg

a7edea6619794f4cba7aea51a842778e.jpeg

 下面展示一些通用函数的常用示例:

b733afc61e7d4b60bf2b8108ab1657cc.png

 2.聚合操作

        聚合操作在数据分析与统计学中经常用到,就是得到一个整体的统计量,对数据整体进行一个概括性的描述,numpy中常见的用于数据的聚合方法如下:

d64f1214185348ab9468dcc489691efb.jpeg

 下面来展示一些常用的聚合方法:

82ec817a47ea44f9af69588dbab8d45f.png

还有二个用于布尔类型的数组的常用方法any()和all(),any用于检测数组中是否存在一个或者多个True,all()用于检测数组中是否都是True,示例如下:

d7612855f2384c3daf1e8a6cfad94e1c.png

 3.数组元素的排序

          python有自带的sort排序可以使用在数组对象上,但是numpy库也有自己的sort方法,它是基于C语言的快速排序算法编写的,所以在面对大量的数据时,运行速度会比python自带的sort方法更快。对一维,可直接使用,对二维数组则需要传入轴参数axis。示例如下:

5e7207f354564c109c3ec1e81528ef11.png

注意:sort方法是对数组进行原地排序,如果想在不改变原数据的情况下返回一个排序好的新数组(不是原数组的副本视图),则可以使用np.sort()函数。

如果想要获得原始数组排序好的索引值可以使用argsort()方法或者np.argsort()函数,示例如下:

40ec04e4e3244355a8fda4581b617bc7.png

五.从线性代数的角度来使用numpy

numpy中有一个linalg模块,其中包括了一些我们所学的线性代数的操作,下面我对其中一些常用的操作进行介绍

1.矩阵的乘法

要让二个array对象进行矩阵的乘法首先需要它们满足线性代数中进行矩阵乘法的条件,然后使用@ 即为进行线性代数中矩阵的乘法,示例如下:

 

2.矩阵的转置和逆 

求矩阵的转置:

求矩阵的逆(注意前提是矩阵有逆,例如上面的矩阵A就是没有逆的,它行列式为0): 

 3.numpy的多项式拟和---np.polyfit()

虽然这个不是线性代数的部分,但是还是想要说说

数学支撑:任何可微连续的函数,都可以用一个N次多项式来估计,而比N次幂更高阶的部分为无穷小可以忽略不计

即:对于一堆数据点(x, y),可以只根据这些数据,找出一个多项式函数,使得函数画出来的曲线和原始数据曲线尽量匹配,示例如下:

 

 

4.numpy求解线性方程组 ---np.linalg.solve()

 由线性代数知识,一个线性方程组可以表示为AX = b的形式,由此可以调用np.linalg.solve来对其进行求解,示例如下:

由于该线性方程具有唯一解,我们可以用逆矩阵的解法来进行检验:

 

 验证应该和上述方法所求的解是相同的,上述逆矩阵求解的结果是由于计算机对浮点数的存储机制所造成的。

六.数组的读取与存储

对array数组对象的读取与存储主要有四种方法:

1.np.load(filename):从.npy或者.npz文件中加载numpy数组,如果文件后缀是.npy返回单个数组,如果文件后缀是.npz返回多个数组的字典

2.np.save(filename, arr):将单个numpy数组保存到.npy文件中

3.np.savez(filename, arra=arra, arrb=arrb):将多个numpy数组保存到.npz未压缩的文件格式中

4.np.savez_compressed(filename, arra=arra, arrb=arrb):将多个numpy数组保存到.npz压缩的文件格式中

示例如下:

 

np.savez_compressed的使用和np.savez相同 。

总结

以上就是我对python的numpy库的常用操作的了解与学习笔记,如果文章有错误和一些常用操作的缺少希望大家在评论区给予意见,如果有问题也可以在评论区进行询问,我会及时给予回复,大家一起进步和提高!


http://chatgpt.dhexx.cn/article/dFaJlKQn.shtml

相关文章

Python库-numpy详解

Python库-numpy详解 1. ndarray介绍2. ndarray的基本操作生成数组数组索引、切片修改数组形状修改数组类型数组去重删除元素 3. ndarray运算逻辑运算通用判断函数三元运算符统计运算数组运算 4. matrix 矩阵介绍5. Python中矩阵运算扩展:正态分布简介正态分布图方差…

python numpy库

文章目录 NumPy( Numeric Python)numpy的引用Ndarray引入n维数组的意义ndarray的组成ndarray对象的属性 数据类型ndarray支持多种数据类型的原因ndarray数组的创建adarray数组的变换ndarray数组运算 索引与切片随机数函数统计函数梯度函数副本与视图numpy线性代数数组与标量之间…

python-numpy库

目录 ndarray对象 arange函数 array函数 random函数 其他创建数组方法 切片和索引及修改数组维度 数组的拼接 数组的分割 数组的转置 数组的运算 numpy(Numerical Python)是科学计算基础库,提供大量科学计算相关功能,比如数据统计,…

Python中的numpy库介绍!

机器学习算法中大部分都是调用Numpy库来完成基础数值计算的。 安装方法: pip3 install numpy1. ndarray数组基础 python中用列表保存一组值,可将列表当数组使用。另外,python中有array模块,但它不支持多维数组,无论是…

NumPy库的介绍与使用(一)

目录 一、NumPy库简介二、NumPy库入门1.数据的维度2.安装NumPy3.导入NumPy库 三、NumPy的数组对象:ndarray1 为什么要引入ndarry呢?2. ndarray是一个多维数组对象2.1 定义2.2 内存中的存储形式2.3 ndarray对象的属性2.4 ndarray数组的元素类型 3. ndarra…

Numpy库的介绍及使用

Numpy库的介绍及使用 1. Numpy库入门1.1 数据的维度1.2 ndarray的优势1.3 ndarray对象的属性1.4 ndarray数组的创建和变换1.4.1 ndarray数组的创建方法1.4.2 ndarray数组维度的变换 1.5 ndarray数组的索引和切片1.6 ndarray数组的运算 2. 数据存取与函数2.1 CSV存取数据2.2 多维…

numpy库的安装方法

安装numpy库的方法 winR,输入cmd,打开cmd 在cmd中输入pip install numpy,回车 输入pip list,查看numpy是否安装成功 4.在cmd中输入python,回车,在输入import numpy, 验证numpy库是否可以被调…

Numpy库的安装

Numpy库的安装 一、numpy简介 NumPy是一个功能强大的Python库,主要用于对多维数组执行计算。NumPy提供了大量的库函数和操作,可以帮助程序员轻松地进行数值计算。这类数值计算广泛用于以下任务: **机器学习模型:**在编写机器学…

numpy库的一些解释

Numpy库介绍 NumPy是一个的Python库,主要用于对多维数组执行计算。 NumPy这个词来源于两个单词-- Numerical [njuːˈmerɪkl] (数值;数值法;数值的;数字的)和 Python。主要用来进行数值计算。 有以下几个特点: 1.numpy内置了并行运算功能&a…

Numpy库

Numpy库入门 一维数据:由对等关系的有序或无序数据构成,采用线性方式组织。 二维数据由多个一维数据构成,是一维数据的组合形式。(表格) 多维数据由一维或二维数据在新维度上扩展形成。 Numpy:开源的Python科学计算…

Python Numpy库的超详细介绍

Numpy库是Python中的一个科学计算库,本文主要介绍了ndarray的基本操作、 ndarray运算等各种Numpy库的超详细教程,需要的朋友可以参考下 1、Numpy概述 1.1 概念 Python本身含有列表和数组,但对于大数据来说,这些结构是有很多不足的。由于列表的元素可以…

python进阶--Numyp库(一)

一、Numpy库介绍 NumPy(Numerical Python)是Python的⼀种开源的数值计算扩展。提供多维数组对象,各种派⽣对象(如掩码数组和矩阵),这种⼯具可⽤来存储和处理⼤型矩阵,⽐Python⾃身的嵌套列表&am…

解决端口8080被占用的问题!

今天在回顾cms项目的时候发现怎么都启动不了,看见左下角报错 原来是8080端口被别的进程占用了。 解决方法:winr cmd 回车 在命令窗口中 输入netstat -ano就可以查看所有端口显示的状态信息 找到这个本地地址是0.0.0.0:8080最后面的PID,就是…

8080端口被占用怎么办

做项目时肯定会遇到8080端口被占用的情况,其实解决办法很简单: CtrlR键,输入cmd: 复制这串代码到cmd界面: netstat -aon|findstr "8080" 可以看到8080确实被占用了: 把后面的都终止掉&#xff…

解决localhost:8080被占用

解决方法如下: 1.以管理员方式打开CMD,我的电脑——c盘——windows——system32——CMD.exe——右键管理员身份打开 1.在cmd里输入netstat -ano|findstr 8080,查看是哪个进程占用了8080端口。 2.输入taskkill /pid 11904 /f,结束…

解决SpringBoot默认Tomcat端口号8080被占用

问题描述: 打开Eclipse后启动SpringBoot项目,发现8080端口被占用。然后寻找Eclipse是否有未关闭的Tomcat项目,发现并没有,重启Eclipse仍然会出现端口占用的请况。 给出的错误信息显示。 Description: The Tomcat connector co…

解决tomcat端口8080被占用

1、eclipse启动tomcat时8080端口被占用: 2、打开CMD: 命令查找正在使用8080端口的进程, netstat -ano|findstr 8080 杀死该进程, taskkill /pid 117800 /f 命令说明:taskkill /pid 117800(进程id号&am…

idea报8080端口被占用解决

1错误提示 Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port. 2原因 这是因为我们某个程序占用了8080端口,有可能是我们以前某个项目没有正确暂停导致。 3解决 1:打开cmd窗…

Tomcat 8080 端口被占用解决方案

1. 报错记录 原因:端口号8080被其他应用程序占用 2. 解决方案 方案一:结束占用端口程序 在Windows控制台中输入下面内容查询占用8080端口的进程id netstat -ano|findstr "8080" ctrlshiftesc打开任务管理器,在服务通过pid找到占用程…

解决8080端口号被占用问题

在使用TomCat时偶尔会出现8080端口被占用的提示,为此总结出如下解决方法: 1.以管理员身份打开命令提示符 2.输入netstat -ano|findstr "8080" 3. 上图最右边的6636、3280、6636为进程id,接下来就要结束这些进程 4.输入taskkill /f /pid 663…