python(6)numpy的使用详细讲解

news2024/11/17 6:29:05

在numpy中,最基本的数据结构是数组,因此我们首先需要了解如何创建一个数组。numpy提供了多种数组创建方法,包括从列表或元组创建、从文件中读取数据、使用特定函数创建等。下面是一些常用的创建方法:

一、创建数组

1. 从列表或元组创建

使用numpy.array()函数可以从列表或元组创建一个数组,例如:

import numpy as np

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

b = np.array((4, 5, 6))

print(a) # [1 2 3]

print(b) # [4 5 6]

2. 从文件中读取数据

当我们需要从文件中读取数据时,可以使用numpy.loadtxt()函数,例如:

import numpy as np

data = np.loadtxt('data.txt')

print(data)

其中data.txt是一个包含数据的文本文件,loadtxt()函数会自动将其读取为一个numpy数组。

3. 使用特定函数创建

numpy提供了多种特定的函数来创建数组,例如:

import numpy as np

a = np.zeros((3, 4)) # 创建一个3行4列的全0数组

b = np.ones((2, 3)) # 创建一个2行3列的全1数组

c = np.random.rand(2, 4) # 创建一个2行4列的随机数数组

print(a)

print(b)

print(c)

 

二、数组的算术运算

让我们创建两个NumPy数组,分别称作data和ones:

NumPy使用图解教程「建议收藏」

若要计算两个数组的加法,只需简单地敲入data + ones,就可以实现对应位置上的数据相加的操作(即每行数据进行相加),这种操作比循环读取数组的方法代码实现更加简洁。

NumPy使用图解教程「建议收藏」

当然,在此基础上举一反三,也可以实现减法、乘法和除法等操作:

NumPy使用图解教程「建议收藏」

许多情况下,我们希望进行数组和单个数值的操作(也称作向量和标量之间的操作)。比如:如果数组表示的是以英里为单位的距离,我们的目标是将其转换为公里数。可以简单的写作data * 1.6:

NumPy使用图解教程「建议收藏」

NumPy通过数组广播(broadcasting)知道这种操作需要和数组的每个元素相乘。

三、数组的切片操作

我们可以像python列表操作那样对NumPy数组进行索引和切片,如下图所示:

NumPy使用图解教程「建议收藏」

四、聚合函数

NumPy为我们带来的便利还有聚合函数,聚合函数可以将数据进行压缩,统计数组中的一些特征值:

NumPy使用图解教程「建议收藏」

除了min,max和sum等函数,还有mean(均值),prod(数据乘法)计算所有元素的乘积,std(标准差),等等。上面的所有例子都在一个维度上处理向量。除此之外,NumPy之美的一个关键之处是它能够将之前所看到的所有函数应用到任意维度上。

五、NumPy中的矩阵操作

创建矩阵

我们可以通过将二维列表传给Numpy来创建矩阵。

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

NumPy使用图解教程「建议收藏」

除此外,也可以使用上文提到的ones()、zeros()和random.random()来创建矩阵,只需传入一个元组来描述矩阵的维度:

NumPy使用图解教程「建议收藏」

六、矩阵的算术运算

对于大小相同的两个矩阵,我们可以使用算术运算符(+-*/)将其相加或者相乘。NumPy对这类运算采用对应位置(position-wise)操作处理:

NumPy使用图解教程「建议收藏」

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

NumPy使用图解教程「建议收藏」

与算术运算有很大区别是使用点积的矩阵乘法。NumPy提供了dot()方法,可用于矩阵之间进行点积运算:

NumPy使用图解教程「建议收藏」

上图的底部添加了矩阵尺寸,以强调运算的两个矩阵在列和行必须相等。可以将此操作图解为如下所示:

NumPy使用图解教程「建议收藏」

七、矩阵的切片和聚合

索引和切片功能在操作矩阵时变得更加有用。可以在不同维度上使用索引操作来对数据进行切片。

NumPy使用图解教程「建议收藏」

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

NumPy使用图解教程「建议收藏」

不仅可以聚合矩阵中的所有值,还可以使用axis参数指定行和列的聚合:

NumPy使用图解教程「建议收藏」

八、矩阵的转置和重构

处理矩阵时经常需要对矩阵进行转置操作,常见的情况如计算两个矩阵的点积。NumPy数组的属性T可用于获取矩阵的转置。

NumPy使用图解教程「建议收藏」

在较为复杂的用例中,你可能会发现自己需要改变某个矩阵的维度。这在机器学习应用中很常见,例如模型的输入矩阵形状与数据集不同,可以使用NumPy的reshape()方法。只需将矩阵所需的新维度传入即可。也可以传入-1,NumPy可以根据你的矩阵推断出正确的维度:

NumPy使用图解教程「建议收藏」

上文中的所有功能都适用于多维数据,其中心数据结构称为ndarray(N维数组)。

NumPy使用图解教程「建议收藏」

很多时候,改变维度只需在NumPy函数的参数中添加一个逗号,如下图所示:

NumPy使用图解教程「建议收藏」

九、NumPy中的公式应用示例

NumPy的关键用例是实现适用于矩阵和向量的数学公式。这也Python中常用NumPy的原因。例如,均方误差是监督机器学习模型处理回归问题的核心:

NumPy使用图解教程「建议收藏」

在NumPy中可以很容易地实现均方误差:

NumPy使用图解教程「建议收藏」

这样做的好处是,numpy无需考虑predictions与labels具体包含的值。文摘菌将通过一个示例来逐步执行上面代码行中的四个操作:

NumPy使用图解教程「建议收藏」

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

NumPy使用图解教程「建议收藏」

然后我们可以计算向量中各值的平方:

NumPy使用图解教程「建议收藏」

现在我们对这些值求和:

NumPy使用图解教程「建议收藏」

最终得到该预测的误差值和模型质量分数。

十、用NumPy表示日常数据

日常接触到的数据类型,如电子表格,图像,音频……等,如何表示呢?Numpy可以解决这个问题。

1、表和电子表格

电子表格或数据表都是二维矩阵。电子表格中的每个工作表都可以是自己的变量。python中类似的结构是pandas数据帧(dataframe),它实际上使用NumPy来构建的。

NumPy使用图解教程「建议收藏」

2、音频和时间序列

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

以下是一段音频文件:

NumPy使用图解教程「建议收藏」

时间序列数据也是如此(例如,股票价格随时间变化的序列)。

3、图像

图像是大小为(高度×宽度)的像素矩阵。如果图像是黑白图像(也称为灰度图像),则每个像素可以由单个数字表示(通常在0(黑色)和255(白色)之间)。如果对图像做处理,裁剪图像的左上角10 x 10大小的一块像素区域,用NumPy中的image[:10,:10]就可以实现。

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

NumPy使用图解教程「建议收藏」

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

NumPy使用图解教程「建议收藏」

4、语言

如果我们处理文本,情况就会有所不同。用数字表示文本需要两个步骤,构建词汇表(模型知道的所有唯一单词的清单)和嵌入(embedding)。让我们看看用数字表示这个(翻译的)古语引用的步骤:“Have the bards who preceded me left any theme unsung?”

模型需要先训练大量文本才能用数字表示这位战场诗人的诗句。我们可以让模型处理一个小数据集,并使用这个数据集来构建一个词汇表(71,290个单词):

NumPy使用图解教程「建议收藏」

然后可以将句子划分成一系列“词”token(基于通用规则的单词或单词部分):

NumPy使用图解教程「建议收藏」

然后我们用词汇表中的id替换每个单词:

NumPy使用图解教程「建议收藏」

这些ID仍然不能为模型提供有价值的信息。因此,在将一系列单词送入模型之前,需要使用嵌入(embedding)来替换token/单词(在本例子中使用50维度的word2vec嵌入):

NumPy使用图解教程「建议收藏」

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

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

相关文章

【YOLOv5/v7改进系列】更换损失函数为CIOU、GIOU、SIOU、DIOU、EIOU、WIOUv1/v2/v3、Focal C/G/S/D/EIOU等

一、导言 在目标检测任务中,损失函数的主要作用是衡量模型预测的边界框(bounding boxes)与真实边界框之间的匹配程度,并指导模型学习如何更精确地定位和分类目标。损失函数通常由两部分构成:分类损失(用于…

叮!云原生虚拟数仓 PieCloudDB Database 动态包裹已送达

第一部分 PieCloudDB Database 最新动态 支持动态配置查询簇 PieCloudDB 最新内核版本 v2.14.0 新增动态配置查询簇功能。PieCloudDB 动态配置查询簇功能实现可伸缩的并行化查询,可提升单个查询并行使用底层资源的能力,同时加快查询响应速度。 动态配…

【论文阅读】-- TimeNotes:时间序列数据的有效图表可视化和交互技术研究

TimeNotes: A Study on Effective Chart Visualization and Interaction Techniques for Time-Series Data 摘要1 介绍和动机2 文献2.1 时间序列数据探索2.1.1 数据聚合2.1.2 基于透镜2.1.3 基于布局 3 任务和设计3.1 数据3.2 领域表征3.3 探索、分析和呈现 4 TimeNotes4.1 布局…

制造型企业生产管理的技巧,你都用过哪些?

作为管理者,一谈到生产管理,你可能会想到很多生产过程中的问题:订单准交率不高、计划达成率不高、生产效率低、再制品太多、生产周期长等等一系列问题;如果你不仅仅是一名管理者,你还是一名企业主,你甚至经…

计算机图形学入门22:双向反射分布函数(BRDF)

1.定义 所谓BRDF(Bidirectional Reflectance Distribution Function,双向反射分布函数),指的是从辐射度量学的角度去理解光线的反射,如下图所示。 所谓反射就是一个点从ωi方向发出的Radiance转化为dA接收到的功率E&am…

【存储】相关内容

【存储】相关内容 1. 存储类型1. 块存储2. 文件存储3. 对象存储4. 三种存储类型对比 2. 常见的存储分类1. DAS2. SAN3. NAS4. 存储分类分析比较 3. 一些存储的概念1. LUN2. volume3. HBA4. iSCSI 1. 存储类型 块存储和文件存储是我们比较熟悉的两种主流的存储类型,…

可燃气体报警器检定规程最新标准:行业规范与监管要求的解读

随着工业、商业和民用领域对安全要求的不断提高,可燃气体报警器作为预防火灾和爆炸事故的重要设备,其准确性和可靠性受到了广泛关注。为了保障可燃气体报警器的正常运行和有效使用,制定并执行最新的检定规程至关重要。 在这篇文章中&#xf…

论文笔记:MobilityGPT: Enhanced Human MobilityModeling with a GPT mode

1 intro 1.1 背景 尽管对人类移动轨迹数据集的需求不断增加,但其访问和分发仍面临诸多挑战 首先,这些数据集通常由私人公司或政府机构收集,因此可能因泄露个人敏感生活模式而引发隐私问题其次,公司拥有的数据集可能会暴露专有商…

RabbitMQ消息可靠性等机制详解(精细版三)

目录 七 RabbitMQ的其他操作 7.1 消息的可靠性(发送可靠) 7.1.1 confim机制(保证发送可靠) 7.1.2 Return机制(保证发送可靠) 7.1.3 编写配置文件 7.1.4 开启Confirm和Return 7.2 手动Ack(保证接收可靠) 7.2.1 添加配置文件 7.2.2 手动ack 7.3 避免消息重复消费 7.3.…

【Python爬虫】Python爬取喜马拉雅,爬虫教程!

一、思路设计 (1)分析网页 在喜马拉雅主页找到自己想要的音频,得到目标URL:https://www.ximalaya.com/qinggan/321787/ 通过分析页面的网络抓包,最终的到一个比较有用的json数据包 通过分析,得到了发送json…

《梦醒蝶飞:释放Excel函数与公式的力量》7.3 RIGHT函数

第七章:文本处理函数 第三节:7.3 RIGHT函数 7.3.1. RIGHT函数简介 RIGHT函数用于从文本字符串的末尾提取指定数量的字符,适合在需要从文本中提取特定后缀或处理固定格式的数据时使用。 语法: RIGHT(text, [num_chars]) text…

1974Springboot医院远程诊断管理系统idea开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 springboot医院远程诊断管理系统是一套完善的信息系统,结合springboot框架和bootstrap完成本系统,对理解JSP java编程开发语言有帮助系统采用springboot框架(MVC模式开发),系统具有完整的源代码和数据库…

提高软件测试效率的7个技巧

🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 软件测试是保证软件质量的重要环节,也是软件开发过程中不可或缺的一部分。 实际工作…

图片识别的3款神器!码住这篇!

在数字化飞速发展的今天,图片识别技术已经成为我们日常生活和工作中不可或缺的一部分。无论是学习、工作还是娱乐,图片识别软件都为我们带来了极大的便利。接下来,就让我们一起了解三款备受推崇的图片识别软件,看看它们是如何在我…

【密码学基础】对随机不经意传输(Random Oblivious Transfer)的理解

ROT在offline阶段生成大量的OT对,在online阶段通过one-pad方式高效加密,并且只需要简单的异或运算就能实现OT过程(去随机化)。 在ROT中,有一个关键点是:需要考虑offline阶段的选择比特和online阶段的选择比…

第15周:RNN心脏病预测

目录 前言 二、前期准备 2.1 设置GPU 2.2 导入数据 2.2.1 数据介绍 2.2.2 导入代码 2.2.3 检查数据 三、数据预处理 3.1 划分训练集与测试集 3.2 标准化 四、构建RNN模型 4.1 基本概念 4.2 搭建代码 五、编译模型 六、训练模型 七、模型评估 总结 前言 &#…

2024年文化传播与对外交流国际学术会议(ICCCFE 2024)

2024年文化传播与对外交流国际学术会议(ICCCFE 2024) 2024 International Conference on Cultural Communication and Foreign Exchange(ICCCFE 2024) 会议简介: 2024年文化传播与对外交流国际学术会议(ICCCFE 2024)定…

Go线程实现模型-P

P 概述 P是G能够在M中运行关键。Go的运行时系统会适时地让P与不同的M建立或断开关联,以使P中的那些可运行的G能够及时获得,这与操作系统内核在CPU之上实时切换不同进程或线程的情况类似 改变P的数量 改变单个Go程序间拥有的P的最大数量有两种方法 调…

《塔瑞斯世界》国服震撼登场!AOC助力玩家开启游戏新征途!

一款真正高画质、重机制、轻数值的MMORPG大作! 你是否厌倦了在MMORPG游戏中被“氪金大佬”碾压?你是否渴望一个纯粹依靠技术和策略就能获得成就感的游戏世界?如果你对这两个问题的答案都是肯定的,那么《塔瑞斯世界》或许值得你一…