【Python 核心库】Numpy 实景教程与练习(python入门教程(非常详细))

网友投稿 225 2022-08-31


【Python 核心库】Numpy 实景教程与练习(python入门教程(非常详细))

NumPy 是 Python 科学计算中最常用的核心库。它可以提供一系列高性能的多维数组对象,以及用于这些数组的工具。【划重点:数组接口是 Numpy 最重要的特性,没有之一。】这篇教程以练代教,通过实操掌握知识点的学习,确保大家能实际应用所学的编程知识。毕竟,Practice Makes Perfect。

为什么学习 Python 绕不开 Numpy?

把 NumPy 看起来可爱逗趣的名字拆开,人家其实非常正经。NumPy 即 Numerical Python(数字化 Python)的缩写。简单来说,NumPy 是 ​​Python​​ 中的线性代数库,这就明示了 NumPy 在 Python 中的重要性了。

之所以说 NumPy 是 Python 中最常用也是最重要的核心库,是因为许多类似 SciPy、Matplotlib、Scikit-learn、TensorFlow 等,都对 NumPy 有一定程度的依赖。例如,TensorFlow 会在内部使用 Numpy 来处理 Tensors 中的多项操作。 在处理数据科学或机器学习的过程中,NumPy 可以对数组提供数学和逻辑运算,同时也在 Python 中对 n 数组和矩阵操作提供各种不同的功能。 NumPy对于对数组进行数学和逻辑运算非常有用。它为Python中对n个数组和矩阵的操作提供了大量有用的功能。简单易用的 NumPy 可以简化复杂的数学实现,让编程概念变得更为数字化且易于理解,因此也广泛使用于各种开源项目中。

如何开始使用 NumPy?

在 ​​Python IDE​​ 中使用教程的​​配套源代码​​学习 NumPy,只需要通过 QuickFix 就可以一键安装。更多关于 NumPy 模块的安装方式,可以查看如何​​手动下载和安装依赖​​。

【源码传送门】​​跟练 1:修改学科成绩曲线

前面曾提到数组是 NumPy 最核心的功能,也是最重要的特性。因此,第一阶段的跟练内容就是使用 ​​numpy.array()​​ 创建数组,然后通过 NumPy 内建的函数修改并计算数组中的内容。

场景说明

假设你是一名大学教师,你在最近的期末考中失手出了巨难的考题,因此学生的成绩都不太理想。虽然如此,你很善良,不忍心大量学生因此挂科,所以你决定修改学科成绩曲线,让大家的分数看起来合理一些。

你初次批改的卷面分分别为:​​[42, 35, 64, 85, 51, 72, 59, 12]​​ 这么一看,8 个人就有 5 个挂,着实有点狠了。

解题

我们把这个分数用 ​​numpy.array()​​ 导入,即​​numpy.array([42, 35, 64, 85, 51, 72, 59, 12])​​。若使用 ​​import numpy as np​​,则应在代码中把 ​​numpy.array()​​ 改为 ​​np.array()​​。【注意:​​.array()​​ 的括号内需要再添加方括号。】

NumPy 中的数组会将数据元素储存于毗邻的储存位置中,通过索引号直接访问。这里的数组为一维数组,随着深入学习,我们慢慢还会接触二维数组 …… N 维数组等等。

【查看源码】​​NumPy 处理成绩曲线,我们需要重复为各个分数进行加分后,再进行合计。NumPy 把这些数据组合成数组后,便可以对这些数据进行统一处理,不仅去相对掉繁琐的 ​​for​​ 循环,让代码看起来更简洁明了,更减少了代码出现 bug 的概率。一般上,这个过程被称之为矢量化(vectorization)。

在这段代码中,我们主要应用了 NumPy 中自建的 ​​.mean()​​ 函数以及 ​​.clip()​​ 函数。前者即平均数(mean)的函数,简单易懂。​​.clip()​​ 函数则确保数组中的值不超过给定的上下限,clip 的意思是“修剪”,所以应用到代码中为:

​​numpy.clip(需要修剪的变量, 下限, 上限)​​

在修改分数曲线时,我们需要修剪的变量为 ​​new_grades​​,下限设置为不低于原先的分数(否则还被降分的学生也太惨了),然后把上限设置为 100 分。毕竟,百分制的话 100 分就是上限了。如此一来,直接使用老传统 ​​print()​​ 进行打印,新的分数就出来了。

刚开始使用 NumPy 其实不太需要担心各种各样的函数眼花缭乱,也不需要担心自己需要死背这些内容,拥抱各类模块的文档(documentation)就可以快速理解模块中的各种函数功能。所以,这类的文档有时候也被称之为小抄(cheatsheet)或食谱(cookbook)。也就是说,合格的程序员必须要学会查找和阅读 ​​NumPy 的官方文档​​。

NumPy 跟练 2:检索学生班级与成绩

上一个跟练的内容为一维数组,这次我们来看看 NumPy 如何处理多维数组中的数据。

场景说明

因为批改大学的试卷太难了,你选择退而求其次,考了教师资格证成为高中体育老师。这一次,我们要用 NumPy 分别记录学生的姓名、班级和成绩。

在这次的场景中,我们将应用 NumPy 中的记录数组(又称之为结构化数组)。这类数组可以为每一列指定数据类别(例如:str 字符串、int 整数、bool 布尔运算等)和名称,让数据筛选变得更简单强大。 我们来看看数据原材料:

data = np.array([    ("丁一", 1, 87),    ("刘二", 2, 68),    ("张三", 3, 72),    ("李四", 3, 55),    ("王五", 3, 93),    ("赵六", 2, 81),    ("孙七", 1, 75),    ("周八", 1, 88),    ("吴九", 2, 64),    ("郑十", 2, 49),], dtype=[("姓名", str), ("班级", int), ("分数", int)])

这一看除了把名字排得特别整齐,其他班级和分数不是乱七八糟嘛 …… 这不我们还得把学生按班级整理好,高分的同学该表扬,低分的同学该批评一下嘛?

练习

上一个跟练我们直接给了标准答案,这一次还是需要大家自己动手尝试。放心,该有的提示和讲解还是会有,但检查答案前还是需要大家思考一下以下的题目:

# 已知data[0] 的输出为 ("丁一", 1, 87)data["姓名"] 的输出为 ['丁一' '刘二' '张三' ...]data[data["分数"] > 59]["姓名"] 的输出为 ['丁一' '刘二' '张三' '王五' '赵六' '孙七' '周八' '吴九']

使用 ​​data[]​​ 函数,求:

低于及格分数的学生姓名。分数最高的学生姓名、班级及分数。【提示:​​np.max()​​】各班级的学生姓名、班级及分数,需按分数大小逆序排列。【提示:​​np.sort()​​】

同学们可以另开新档尝试自己手动做题,再查看源代码中的 ​​score2D.py​​ 参考答案,​​在线查看并运行项目​​:​​Python 教程: ​​怎么看待 Python(PyScript) 可以做浏览器前端开发语言?​​

​​使用 Python Turtle 制作贪吃蛇游戏​​

​​学习 Python 爬虫,手把手通过 Python 入门爬取网页信息​​


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:JAVA实现经典扫雷游戏的示例代码
下一篇:Python爬虫彩票数据(120期)爬取
相关文章

 发表评论

暂时没有评论,来抢沙发吧~