政安晨:【示例演绎】【Python】【Numpy数据处理】快速入门(一)

简介

NumPy是SciPy家族的成员之一。

SciPy家族是一个专门应用于数学、科学和工程领域的开源Python生态圈,或者说是一个由多个Python库组成的集合,用于解决科学计算中的各种问题。这些库构成了一个功能强大的科学计算工具箱,可以进行数值计算、优化、信号处理、统计分析、线性代数等各种操作。

以下是SciPy家族的一些主要成员:

  1. NumPy: NumPy是SciPy的核心库,提供了多维数组对象和各种操作数组的函数。它是Python科学计算的基础,可以进行高效的数值计算

  2. SciPy: SciPy是一个用于科学计算的库,提供了许多高级的数学算法和工具。其中包括插值、积分、优化、信号处理、线性代数、统计分析等功能

  3. Matplotlib: Matplotlib是一个用于绘制二维图形的库。它可以生成各种类型的图形,包括线图、散点图、柱状图等。Matplotlib与NumPy和SciPy配合使用,可以方便地可视化科学数据

  4. Pandas: Pandas是一个用于数据处理和分析的库。它提供了高级数据结构,如DataFrame和Series,可以方便地处理和操作数据。

  5. SymPy: SymPy是一个用于符号计算的库。它可以进行代数计算、微积分、方程求解等操作,是一个强大的数学工具。

  6. Scikit-learn: Scikit-learn是一个用于机器学习的库。它实现了许多常用的机器学习算法和工具,包括分类、回归、聚类等。

  7. SciPy Lecture Notes: SciPy Lecture Notes是一份关于SciPy家族的教程和指南。它提供了详细的介绍和示例,帮助用户学习和使用这些库

这些成员共同构成了SciPy家族,提供了丰富的科学计算功能和工具,广泛应用于科学研究、工程计算、数据分析等领域。

SciPy家族的核心成员为Matplotlib、SciPy和NumPy,可以概括为MSN这三个字母。


开始

NumPy的核心是多维数组类numpy.ndarray,矩阵类numpy.matrix是多维数组类的派生类,以多维数组类为数据组织结构,NumPy提供了众多的数学、科学和工程函数,此外,NumPy还提供了以下多个子模块:

numpy.random:随机抽样子模块。

numpy.linalg:线性代数子模块。

numpy.fft:傅里叶变换子模块。

numpy.ctypeslib:C-Types外部函数接口子模块。

numpy.emath:具有自动域的数学函数子模块。

numpy.testing:测试支持子模块。

numpy.matlib:矩阵库子模块。

numpy.dual:SciPy加速支持子模块。

numpy.distutils:打包子模块

环境准备

咱们这篇演绎还是基于Jupyter Notebook,第一次看到这里的小伙伴参考我的这两篇文章构建环境:

Windows系统

政安晨的机器学习笔记——示例讲解机器学习工具Jupyter Notebook入门(超级详细)icon-default.png?t=N7T8https://blog.csdn.net/snowdenkeke/article/details/135880886Ubuntu系统

政安晨的机器学习笔记——基于Ubuntu系统的Miniconda安装Jupyter Notebookicon-default.png?t=N7T8https://blog.csdn.net/snowdenkeke/article/details/135919533

启动虚拟环境:

列表与数组

NumPy提供了一个高性能的多维数组对象,并且包含了许多用于操作这些数组的函数。

从列表创建一维数组

a = np.array([1, 2, 3]) 

从嵌套列表创建二维数组

b = np.array([[1, 2, 3], [4, 5, 6]]) 

数组的属性与操作

NumPy数组具有许多有用的属性和方法。

  • shape属性:返回数组的维度。
  • ndim属性:返回数组的维数。
  • dtype属性:返回数组的数据类型。
a = np.array([1, 2, 3])
print(a.shape)

形状:

维度:

数据类型

数组属性:

数组的切片与索引

可以使用切片操作或者索引操作来访问和修改数组元素。

a = np.array([1, 2, 3, 4, 5])
print(a[2:4])

b = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(b[1, 2]) 

同时,NumPy数组可以进行各种数学运算,并且支持广播(broadcasting)机制,使得对不同形状的数组进行运算变得非常方便。

数组的加减乘除

可以对数组进行逐元素的加减乘除运算,也可以与标量进行运算。

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
c = a + b
d = a * 2
print(c)
print(d)

执行如下:

数组的矩阵乘法

通过NumPy库提供的dot()函数可以进行矩阵的乘法运算。

a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
c = np.dot(a, b)
print(c)

执行如下:

这里,给小伙伴们罗嗦一下这个点积的计算:

上面点积结果矩阵中左上角19的计算:

1 × 5 + 2 × 7 = 19

右上角22的计算:

1 × 6 + 2 × 8 = 22

左下角43的计算:

3 × 5 + 4 × 7 = 43

右下角50的计算:

3 × 6 + 4 × 8 = 50

修改数组结构和数据类型

咱们先准备一个数组:

a = np.arange(6)
a
a.shape
a.dtype

现在咱们改变数组结构:

a = a.reshape((2,3))
a

现在咱们改变数据类型:

a = a.astype(np.float64)
a.dtype

仔细讲一下:维、秩、轴

维,就是维度。通常说数组是几维的,就是指维度数,如三维数组的维度数就是3。

维度数还有一个专用名字,即秩,也就是数组属性ndim。秩这个名字感觉有些多余,不如维度数更容易理解。

轴,简单来说,我们可以把数组的轴和笛卡儿坐标系的轴来对应一下

一维数组,类比于一维空间,只有一个轴,那就是0轴。

二维数组,类比于二维空间,有两个轴,习惯表示成行和列,行的方向是0轴,列的方向是1轴。

三维数组,类比于三维空间,有三个轴,习惯表示成层、行和列,层的方向是0轴,行的方向是1轴,列的方向是2轴。

数组的轴

接下来咱们用一个三维数组求总和与分层求和的例子来演示一下轴概念的重要性,我们知道,列表求和需要使用Python内置的求和函数sum( ),且只能对数值型的一维列表求和,而数组则是自带求和方法,且支持按指定轴的方向求和:

# array([15, 51, 87]) >>> # 分层求和方法2 array([15, 51, 87])

下面是:3层2行3列的结构

a = np.arange(18).reshape((3,2,3))
a

计算全部数组元素之和:

0轴方向求和(3层合并成1层,返回二维数组):

1轴方向求和(2行合并成1行,返回二维数组):

2轴方向求和(3列合并成1列,返回二维数组):

一种分层求和方法:

a.sum(axis=1).sum(axis=1) 

另一种分层求和方法:

a.sum(axis=2).sum(axis=1)

广播和矢量化

NumPy数组具有极高的、接近C语言的运行效率,处理速度远比Python列表快得多。

为什么Numpy对数组比列表的处理速度快呢?

原来,ndarray拥有区别于列表的两大“独门绝技”:广播(broadcast)和矢量化(vectorization)

广播可以理解为隐式地对每个元素实施操作;矢量化可以理解为代码中没有显式的循环、索引等

广播和矢量化对于初学者而言有点抽象,咱们用两个例子来说明一下:

示例一:数值型数组的各个元素加1

使用Python列表实现列表的各个元素加1,似乎除了循环就没有更好的办法,当然,用map( )函数来实现也可以,但这个方法只是避免显式地使用循环,实际处理速度不会比循环更快。

像这样:

a = [0, 1, 2, 3, 4]
for i in range(len(a)):a[i] += 1

如果换成NumPy数组,利用其广播特性,无须循环就可以实现对数组每一个元素加1的操作,如下:

a = np.array([0, 1, 2, 3, 4])
a += 1
a

数组的广播特性,不仅省略了循环结构,更重要的是可以大幅度加快数据的处理速度。

示例二:两个等长的数值型数组的对应元素相加

如果两个等长的Python列表对应元素相加,需要同时遍历两个列表,下面使用zip( )函数,辅以列表推导式,实现两个等长Python列表的对应元素相加,当然,这种运行效率并不高:

a = [0, 1, 2, 3, 4]
b = [5, 6, 7, 8, 9]
[i+j for i, j in zip(a, b)]

如果换成NumPy数组,利用其矢量化特性来实现两个数组对应元素相加,就像是进行两个整型变量相加其代码如下

a = np.array([0, 1, 2, 3, 4])
b = np.array([5, 6, 7, 8, 9])
a + b

以上两个例子分别用列表和数组的方式给出了答案:显然,用NumPy数组实现起来要比用Python列表更直观、更简洁,这正是得益于NumPy的两大特性:广播和矢量化。

广播和矢量化是NumPy最核心的特性之一,是NumPy的本质

广播和矢量化体现在代码上则有以下几个特点:

1)矢量化代码更简洁,更易于阅读;

2)代码行越少意味着出错的概率越小;

3)代码更接近标准的数学符号;

4)矢量化代码更符合Python之禅。


好啦,这一篇就到这里,咱们暂时先告一段落,毕竟:那啥不是一天建成的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/685743.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QT+OSG/osgEarth编译之八十九:osgdb_ply+Qt编译(一套代码、一套框架,跨平台编译,版本:OSG-3.6.5插件库osgdb_ply)

文章目录 一、osgdb_ply介绍二、文件分析三、pro文件四、编译实践一、osgdb_ply介绍 斯坦福三角形格式(Stanford Triangle Format)是一种用于存储三维模型数据的文件格式,也称为 PLY 格式。它最初由斯坦福大学图形实验室开发,用于存储和共享三维扫描和计算机图形数据。 P…

活用 Composition API 核心函数,打造卓越应用(上)

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

面试指导(面试会遇到的问题准备)

自我介绍 介绍项目流程 项目简介、用途项目架构、技术、模块、我负责的模块 开发过程中遇到的问题 效率问题、并发问题、JVM内存泄漏等问题接口修改文档不同步拖进度问题使用到了没使用过的技术浏览器 JDK linux等环境问题 你的优点是什么 能加班,能出差学习能…

简单试验:用Excel进行爬虫

文章目录 Excel的版本具体操作实例从网站上爬取工商银行的汇率Excel的版本 office 2016,2019,365这几个版本都可以 具体操作 #mermaid-svg-NlIVMivGoJbdyWW0 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-NlIVMi…

Vue2学习第三天

Vue2 学习第三天 1. 计算属性 computed 计算属性实现 定义:要用的属性不存在,要通过已有属性计算得来。 原理:底层借助了Objcet.defineproperty方法提供的getter和setter。 get函数什么时候执行? 初次读取时会执行一次。当依赖…

如何让Obsidian实现电脑端和安卓端同步

Obsidian是一款知名的笔记软件,支持Markdown语法,它允许用户在多个设备之间同步文件。要在安卓设备上实现同步,可以使用remote save插件,以下是具体操作步骤: 首先是安装电脑端的obsidian,然后依次下载obs…

Typora+PicGO+腾讯云COS做图床教程

文章目录 Typora+PicGO+腾讯云COS做图床教程一、为什么使用图床二、Typora、PicGO和腾讯云COS介绍三、下载Typora和PicGOTyporaPicGO 四、配置Typora、PicGO和腾讯云COS腾讯云COS配置PicGO配置Typora配置 Typora+PicGO+腾讯云COS做…

STM32入坑

目录 一、选择合适的开发板 二、安装和配置开发环境 三、学习基础知识 四、编写和调试程序 五、扩展功能和学习进阶知识 六、坚持,坚持,坚持 七、STM32的学习路径 一、选择合适的开发板 首先,你需要选择一款合适的STM32开发板。开发板…

mysql 执行update操作 记录未修改

问题 mysql 执行update操作 记录未修改 详细问题 笔者进行SpringBootMybatis项目开发,确认执行update操作 控制台内容如下 Creating a new SqlSession SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession3cbe9459] was not registered for sync…

基于STM32的老人心率监测系统

1. 系统设计 本次课题为基于STM32的老人心率监测系统,在此设计了如图2.1所示的系统结构框图,整个系统包括了MAX30102心率血氧检测模块,SIM800短信模块,液晶显示模块,按键,ESP8266无线通信模块以及主控制器s…

关于数据库

目录 一 什么是数据库(DB) 二 什么是数据库管理系统(DBMS) 三 数据库的作用/好处 一 什么是数据库(DB) 简单理解,数据库是存放数据的地方,就像冰箱是存放冷鲜食品的地方。 数据是数据存储的基本对象,而数据分为多…

mysql 查询性能优化关键点总结

MySQL查询性能优化是数据库管理的重要环节,良好的性能优化可以提高查询效率,降低系统负载。以下是一些关键点,用于优化MySQL查询性能: 1. 索引优化 索引是MySQL查询优化的重要手段,合理的索引可以大大…

【CV论文精读】【BEV感知】BEVFormer:通过时空Transformer学习多摄像机图像的鸟瞰图表示

【CV论文精读】BEVFormer Learning Bird’s-Eye-View Representation from Multi-Camera Images via Spatiotemporal Transformers BEVFormer:通过时空Transformer学习多摄像机图像的鸟瞰图表示 图1:我们提出了BEVFormer,这是一种自动驾驶的…

海纳思NAS盒子设置网卡静态IP

TV机顶盒刷了海纳思NAS系统之后,就可以跑路由了,系统默认得网卡是DHCP配置,它这个东西很麻烦,如果是物理硬件路由器,可以到后台去设置MAC跟IP地址相互绑定。 但如果是直接插在移动光猫上面,用户管理员是没…

js基础篇

javascript 1.1javascript是什么&#xff1f; 是运行在浏览器【客户端】的编程语言 1.2 js的组成 ECMAScript (基础语法) Web APIs (DOM BOM) 1.3 js的书写位置 内部&#xff0c;外部&#xff0c;行内 【代码写在标签内部】 // 内部 <script>alter("你好&…

软件实例分享,药店进销存软件医药系统进销存教程

软件实例分享&#xff0c;药店进销存软件医药系统进销存教程 一、前言 以下软件程序教程以 佳易王药店进销存管理系统V16.0为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 软件可以对药品的有效期进行管理&#xff0c;可以查询还有多少天到期的…

云计算基础-网络虚拟化

虚拟交换机 什么是虚拟交换机 虚拟交换机是一种运行在虚拟化环境中的网络设备&#xff0c;其运行在宿主机的内存中&#xff0c;通过软件方式在宿主机内部实现了部分物理交换机的功能&#xff0c;如 VLAN 划分、流量控制、QoS 支持和安全功能等网络管理特性 虚拟交换机在云平…

编程语言的实际应用场景(C语言场景)

从应用范围上来说&#xff0c;这些编程语言大致可以分为两种&#xff1a; 一种是专用型语言&#xff0c;也就是针对某个特定领域而设计出来的语言&#xff1b;另一种是通用型语言&#xff0c;它们可以开发多种类型的应用程序&#xff0c;而不是局限在某个特定的领域。 专用型…

深度学习基础之《TensorFlow框架(2)—图》

一、什么是图结构 1、图包含了一组tf.Operation代表的计算单元对象和tf.Tensor代表的计算单元之间流动的数据 图结构&#xff1a;数据(Tensor) 操作(Operation) 二、图相关操作 1、默认图 通常TensorFlow会默认帮我们创建一张图 查看默认图的两种方法&#xff1a; &#x…

紫微斗数全书卷一斗数太微赋

文章目录 前言太微赋形性赋星垣论斗数准绳斗数发微论重补斗数彀率增补太微赋总结 前言 紫微斗数全书卷一 太微赋 斗数至玄至微&#xff0c;理旨难明&#xff0c;虽设问于各篇之中&#xff0c;犹有言而未尽&#xff0c;至如星之分野&#xff0c;各有所属&#xff0c;寿夭贤愚&…