当前位置 : 主页 > 编程语言 > python >

【Python 核心库】Numpy 实景教程与练习

来源:互联网 收集:自由互联 发布时间:2022-06-15
NumPy 是 Python 科学计算中最常用的核心库。它可以提供一系列高性能的多维数组对象,以及用于这些数组的工具。【划重点:数组接口是 Numpy 最重要的特性,没有之一。】这篇教程以练

【Python 核心库】Numpy 实景教程与练习_数据

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 模块的安装方式,可以查看如何​​手动下载和安装依赖​​。

【Python 核心库】Numpy 实景教程与练习_教程_02

【源码传送门】​​https://d1590a0dfb-share.lightly.teamcode.com​​


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 维数组等等。

【Python 核心库】Numpy 实景教程与练习_数据_03

【查看源码】​​https://d1590a0dfb-share.lightly.teamcode.com​​

如果不使用 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()​​】
  • 【Python 核心库】Numpy 实景教程与练习_python_04

    同学们可以另开新档尝试自己手动做题,再查看源代码中的 ​​score2D.py​​ 参考答案,​​在线查看并运行项目​​:​​https://d1590a0dfb-share.lightly.teamcode.com​​

    最后的最后,无论是学习编程或其他内容,只有练习、练习再练习才能在知识基础上更进一步。欢迎查看源码中的扩展练习与答案以及往期 Python 教程: ​​怎么看待 Python(PyScript) 可以做浏览器前端开发语言?​​

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

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

    上一篇:Python简明教程--String
    下一篇:没有了
    网友评论