热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python科学计算_可视化图解Python科学计算包NumPy

NumPy包是python生态系统中数据分析、机器学习和科学计算的主力。它极大地简化了向量和矩阵的操作。Python的一些主要软件包依赖于NumPy作为其基础架构的基础部分

e2318aaff7a2070928c2796bd0d3c9e8.png

4e2b0b3290409ec9f6690f1cc5030ebf.png

NumPy包是python生态系统中数据分析、机器学习和科学计算的主力。 它极大地简化了向量和矩阵的操作。Python的一些主要软件包依赖于NumPy作为其基础架构的基础部分(例如scikit-learn、SciPy、pandas和tensorflow)。我们将介绍一些使用NumPy的主要方法,以及在我们为机器学习模型提供服务之前它如何表示不同类型的数据(表格、声音和图像)。

import numpy as np

一、数组操作

1.1创建数组

通过将python列表传递给NumPy对象,使用np.array()创建一个NumPy数组(即ndarray)。 Python创建了我们在右边可以看到的数组:

e46e17f0f2410052b20e66f546c300f8.png

一般情况,我们希望直接使用NumPy作为初始化的数组数据。 NumPy为这些情况提供了诸如ones(),zeros()和random.random()类等方法。 我们只需要向这些方法传递要生成的元素数量的参数:

dac2cdb3ff88784317874a2c90b77b83.png

一旦我们创建了数组,我们就可以开始以有趣的方式操作它们。

1.2 数组算术

先来创建两个NumPy数组来展示它们的用处。 我们称之为data和ones:

6b87d36d10895063bd0776cdc7045204.png

这两个数组的加法就像我们+1那么简单(每一行相加)。

dfee48d9b2578959f6e4a21e7249c125.png

可以发现这样的计算不必在循环中实现。 这是非常好的抽象处理,可以让你在更高层次上思考问题,而不是陷入如何实现计算的算法里面。

我们还可以像下面一样进行其他运算:

5f0c77d72626302be3d95d9da09dadc0.png

通常情况下,我们希望在数组和单个数字之间执行操作(我们也可以将其称为向量和标量之间的操作)。 比如说,我们的数组表示以英里为单位的距离,我们希望将其转换为公里数。 我们只需要让数据* 1.6就可以了。

3b2d776eb44f8d9d71b0c4488d619ca7.png

NumPy让每个单元格都会发生相乘叫做广播。

1.3索引数组

我们可以索引、切片NumPy数组。

ad20daf9a1e0a7b9615a7740ad818321.png

1.4 数组聚合

NumPy为我们提供非常好用的聚合功能:

3c251b12dd9d377861e2590a4b0e21bf.png

除了最小值、最大值和总和之外,还得到非常棒的东西,比如平均值、所有元素相乘的结果、标准差,以及其他很多。

二、多维处理

2.1 创建矩阵

所有的例子都在一个维度上处理向量。 NumPy的厉害之处是能够将我们目前所看到的所有内容应用到任意维度上。我们可以传递一个Python列表,让NumPy创建一个矩阵来表示它们:

np.array([[1,2],[3,4]])

bbf59f1fc32f4d2e346bf5e1a3b343cf.png

我们也可以使用上面提到的相同方法(ones(),zeros()和random.random()),只要我们给它们一个元组来描述我们正在创建的矩阵的维度:

6d7753982892464242145fb17594cff0.png

2.2 矩阵算术

如果两个矩阵的大小相同,我们可以使用算术运算符(+ – * /)来进行矩阵计算。NumPy将这些作为位置操作处理:

7008fa1160f80f5e4fd138ed4b6d073c.png

只有当不同维度为1时(例如矩阵只有一列或一行),我们才能在不同大小的矩阵上进行这些算术运算,在这种情况下,NumPy将其广播规则用于该操作:

f6a0dd1033c4b5a0b7f97bef7990c16d.png

2.3 点积

NumPy为每个矩阵提供了一个dot()方法,我们可以用它来执行与其他矩阵的点积运算:

d6f60a822bae5a5ff34c77b1d15b648a.png

两个矩阵在它们彼此面对的一侧必须具有相同的尺寸(上图底部红色的数字)。

您可以将此操作可视化为如下所示:

7e7096c87ed7c1a34f45354004b7c16d.png

2.4 矩阵索引

当我们操作矩阵时,索引和切片操作变得更加有用:

bf89e05df5e27393c3667f8e61858d17.png

冒号表示从哪个位置到哪个位置,留空表示开头或者结尾;逗号表示行和列。NumPy的索引是从0开始的,并且后面的方括号是不包含后面的值(即小于后面的值)。

2.5 矩阵聚合

我们可以像聚合向量一样聚合矩阵:

284e2208177581ce85e5cb2d8876ca47.png

我们不仅可以聚合矩阵中的所有值,还可以使用axis参数在行或列之间进行聚合:

80d9566ff1183ad34dd30c99e97e80e9.png

2.6 转置和重塑

处理矩阵时的一个共同需求是需要旋转矩阵。 当我们需要采用两个矩阵的点积并需要对齐它们共享的维度时,通常就是这种情况。 NumPy数组有一个方便的属性叫做T来获得矩阵的转置:

7605db922d688f9f075b946d36f5e27f.png

在更高级的应用中,您可能会发现自己需要切换某个矩阵的维度。 在机器学习应用程序中通常就是这种情况,其中某个模型期望输入的某个形状与您的数据集不同。 在这些情况下,NumPy的reshape()法很有用。 您只需将矩阵所需的新尺寸传递给它即可。

f72b94c4fefcc3cfa6f0b852696406e6.png

2.7 更多维度

NumPy可以完成我们在任何维度定义数据。 其中心数据结构称为ndarray(N维数组)。

7a03f10b6967fdf9b7cae5cd2add0b85.png

在很多方面,处理新维度只需在NumPy函数的参数中添加逗号:

79e6bccdb242ab4fce336f2321b64c60.png

三、公式计算

我们举一个计算均方误差的例子。实现适用于矩阵和向量的数学公式是考虑NumPy的关键用例。例如均方误差MSE公式,它是监督机器学习、模型处理、回归问题的核心公式:

在NumPy中实现这一点是轻而易举的:

e656a212f6c6436ed2255e7bf2ded1fc.png

这样做的好处是我们不需要关心predictions和labels是否包含一个或一百个值(只要它们的大小相同)。我们可以通过一个示例逐步执行该代码行中的四个操作:

1c1d336ebd5e46008594e6e265e5805b.png

predictions和labels向量都包含三个值。 这意味着n的值为3。 在我们执行减法后,我们最终得到如下值:

d32a26cae9719134d16a8efeddf3eadf.png

然后我们可以对矢量中的值进行平方:

0c2fae4684eba11a36259f4a58b614d2.png

然后求和:

a11d73a5f754252eb8bae67bd32699fe.png

结果就是均方误差。

四、数据表示

4.1 表格和电子表格

构建模型所需的所有数据类型(电子表格、图像和音频等),很多都非常适合在n维数组中表示。

电子表格或值表是二维矩阵。 电子表格中的每个工作表都可以是自己的变量。 Python中最受欢迎的抽象是pandas数据帧DataFrame,它实际上使用NumPy并在其上构建。

5cdc8c7a960b1cd15f4d18f947b6d07a.png

4.2 音频

音频文件是一维样本数组。 每个样本都是一个代表音频信号的一小部分的数字。 CD质量的音频每秒可能有44,100个样本,每个样本是-65535到65536之间的整数。这意味着如果你有一个10秒的CD质量的WAVE文件,你可以将它加载到长度为10 * 44,100的NumPy数组中 = 441,000个样本。 想要提取音频的第一秒? 只需将文件加载到我们称之为audio的NumPy数组中,然后获取audio[:44100]。

以下是一段音频文件:

32202902219a260e52a66951f2e2d161.png

4.3 图像

图像是高度×宽度的像素矩阵。如果图像是黑白的(即灰度),则每个像素可以由单个数字表示(通常在0(黑色)和255(白色)之间)。

想要裁剪图像的左上角10 x 10像素部分? 告诉NumPy让你image[:10,:10]。

这是一个图像文件的片段:

87439725d576661891381087dd85deb7.png

如果图像是彩色的,则每个像素由三个数字表示(RGB)。 在这种情况下,我们需要第三维(因为每个单元格只能包含一个数字)。 因此彩色图像由尺寸的ndarray表示:(高x宽x 3)。

a7c1292a54220be529237bca0741d857.png


推荐阅读
  • 本文介绍如何使用OpenCV和线性支持向量机(SVM)模型来开发一个简单的人脸识别系统,特别关注在只有一个用户数据集时的处理方法。 ... [详细]
  • 使用 Jupyter Notebook 实现 Markdown 编写与代码运行
    Jupyter Notebook 是一个开源的基于网页的应用程序,允许用户在同一文档中编写 Markdown 文本和运行多种编程语言的代码,并实时查看运行结果。 ... [详细]
  • 本文详细介绍了在Windows操作系统上使用Python 3.8.5编译支持CUDA 11和cuDNN 8.0.2的TensorFlow 2.3的步骤。文章不仅提供了详细的编译指南,还分享了编译后的文件下载链接,方便用户快速获取所需资源。此外,文中还涵盖了常见的编译问题及其解决方案,确保用户能够顺利进行编译和安装。 ... [详细]
  • 如何在Linux系统中部署TensorFlow的详细指南
    本文详细介绍了在Linux系统中部署TensorFlow的过程。作者基于北京大学曹建教授的MOOC课程进行学习,但由于课程内容较旧,环境配置方面遇到了不少挑战。经过多次尝试,最终成功解决了这些问题,并总结了一套详细的安装指南,帮助初学者快速上手TensorFlow。 ... [详细]
  • vue引入echarts地图的四种方式
    一、vue中引入echart1、安装echarts:npminstallecharts--save2、在main.js文件中引入echarts实例:  Vue.prototype.$echartsecharts3、在需要用到echart图形的vue文件中引入:   importechartsfrom"echarts";4、如果用到map(地图),还 ... [详细]
  • Leetcode学习成长记:天池leetcode基础训练营Task01数组
    前言这是本人第一次参加由Datawhale举办的组队学习活动,这个活动每月一次,之前也一直关注,但未亲身参与过,这次看到活动 ... [详细]
  • 本文介绍了如何使用 Google Colab 的免费 GPU 资源进行深度学习应用开发。Google Colab 是一个无需配置即可使用的云端 Jupyter 笔记本环境,支持多种深度学习框架,并且提供免费的 GPU 计算资源。 ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 如何将Python与Excel高效结合:常用操作技巧解析
    本文深入探讨了如何将Python与Excel高效结合,涵盖了一系列实用的操作技巧。文章内容详尽,步骤清晰,注重细节处理,旨在帮助读者掌握Python与Excel之间的无缝对接方法,提升数据处理效率。 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 如何高效启动大数据应用之旅?
    在前一篇文章中,我探讨了大数据的定义及其与数据挖掘的区别。本文将重点介绍如何高效启动大数据应用项目,涵盖关键步骤和最佳实践,帮助读者快速踏上大数据之旅。 ... [详细]
  • 在Windows命令行中,通过Conda工具可以高效地管理和操作虚拟环境。具体步骤包括:1. 列出现有虚拟环境:`conda env list`;2. 创建新虚拟环境:`conda create --name 环境名`;3. 删除虚拟环境:`conda env remove --name 环境名`。这些命令不仅简化了环境管理流程,还提高了开发效率。此外,Conda还支持环境文件导出和导入,方便在不同机器间迁移配置。 ... [详细]
  • 本文提供了PyTorch框架中常用的预训练模型的下载链接及详细使用指南,涵盖ResNet、Inception、DenseNet、AlexNet、VGGNet等六大分类模型。每种模型的预训练参数均经过精心调优,适用于多种计算机视觉任务。文章不仅介绍了模型的下载方式,还详细说明了如何在实际项目中高效地加载和使用这些模型,为开发者提供全面的技术支持。 ... [详细]
  • 兆芯X86 CPU架构的演进与现状(国产CPU系列)
    本文详细介绍了兆芯X86 CPU架构的发展历程,从公司成立背景到关键技术授权,再到具体芯片架构的演进,全面解析了兆芯在国产CPU领域的贡献与挑战。 ... [详细]
author-avatar
万幼南
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有