0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

最详细的 NumPy 图解教程!

数据分析与开发 来源:大数据文摘 作者:大数据文摘 2021-06-09 18:03 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

NumPy是Python中用于数据分析、机器学习、科学计算的重要软件包。它极大地简化了向量和矩阵的操作及处理。python的不少数据处理软件包依赖于NumPy作为其基础架构的核心部分(例如scikit-learn、SciPy、pandas和tensorflow)。除了数据切片和数据切块的功能之外,掌握numpy也使得开发者在使用各数据处理库调试和处理复杂用例时更具优势。

在本文中,将介绍NumPy的主要用法,以及它如何呈现不同类型的数据(表格,图像,文本等),这些经Numpy处理后的数据将成为机器学习模型的输入。

NumPy中的数组操作

创建数组

我们可以通过将python列表传入np.array()来创建一个NumPy数组(也就是强大的ndarray)。在下面的例子里,创建出的数组如右边所示,通常情况下,我们希望NumPy为我们初始化数组的值,为此NumPy提供了诸如ones(),zeros()和random.random()之类的方法。我们只需传入元素个数即可:

d3cfeb46-c540-11eb-9e57-12bb97331649.jpg

一旦我们创建了数组,我们就可以用其做点有趣的应用了,文摘菌将在下文展开说明。

数组的算术运算

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

d3e802c6-c540-11eb-9e57-12bb97331649.png

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

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

d40961aa-c540-11eb-9e57-12bb97331649.jpg

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

d42978a0-c540-11eb-9e57-12bb97331649.png

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

数组的切片操作

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

d43fb14c-c540-11eb-9e57-12bb97331649.png

聚合函数

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

d44b62b2-c540-11eb-9e57-12bb97331649.jpg

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

NumPy中的矩阵操作

创建矩阵

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

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

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

d4688572-c540-11eb-9e57-12bb97331649.jpg

矩阵的算术运算

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

d476619c-c540-11eb-9e57-12bb97331649.png

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

d4a5dd46-c540-11eb-9e57-12bb97331649.jpg

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

d4d56c32-c540-11eb-9e57-12bb97331649.png

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

d4eb2338-c540-11eb-9e57-12bb97331649.jpg

矩阵的切片和聚合

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

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

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

矩阵的转置和重构

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

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

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

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

d59f8882-c540-11eb-9e57-12bb97331649.jpg

NumPy中的公式应用示例

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

d5b3750e-c540-11eb-9e57-12bb97331649.png

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

d63e1ec0-c540-11eb-9e57-12bb97331649.jpg

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

d66c614a-c540-11eb-9e57-12bb97331649.png

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

d68c8c5e-c540-11eb-9e57-12bb97331649.png

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

d696a7a2-c540-11eb-9e57-12bb97331649.png

现在我们对这些值求和:

d6abd0d2-c540-11eb-9e57-12bb97331649.png

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

用NumPy表示日常数据

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

表和电子表格

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

音频和时间序列

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

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

图像

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

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

语言

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

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

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

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

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

你可以看到此NumPy数组的维度为[embedding_dimension x sequence_length]。

在实践中,这些数值不一定是这样的,但我以这种方式呈现它是为了视觉上的一致。出于性能原因,深度学习模型倾向于保留批数据大小的第一维(因为如果并行训练多个示例,则可以更快地训练模型)。很明显,这里非常适合使用reshape()。例如,像BERT这样的模型会期望其输入矩阵的形状为:[batch_size,sequence_length,embedding_size]。

这是一个数字合集,模型可以处理并执行各种有用的操作。我留空了许多行,可以用其他示例填充以供模型训练(或预测)。

事实证明,在我们的例子中,那位诗人的话语比其他诗人的诗句更加名垂千古。尽管生而为奴,诗人安塔拉(Antarah)的英勇和语言能力使他获得了自由和神话般的地位,他的诗是伊斯兰教以前的阿拉伯半岛《悬诗》的七首诗之一。

转自:大数据文摘

原文链接:https://jalammar.github.io/visual-numpy/

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STD
    STD
    +关注

    关注

    0

    文章

    38

    浏览量

    14666
  • python
    +关注

    关注

    57

    文章

    4856

    浏览量

    89551
  • 数据集
    +关注

    关注

    4

    文章

    1230

    浏览量

    26036

原文标题:这是我见过最好的 NumPy 图解教程!

文章出处:【微信号:DBDevs,微信公众号:数据分析与开发】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    图解AI核心技术:大模型、RAG、智能体、MCP

    和使用AI。 大模型 Transformer vs. Mixture of Experts 混合专家 (MoE) 是一种流行的架构,它使用不同的“专家”来改进 Transformer 模型。 下图解释了
    的头像 发表于 10-21 09:48 394次阅读
    <b class='flag-5'>图解</b>AI核心技术:大模型、RAG、智能体、MCP

    图解环路设计及控制技术探讨

    由于之前缺乏控制理论方面的知识在刚接触反馈环路的时候对其中的很多名词不是很明白,这次准备采用图解的方法逐一的搞清楚这些名词并且试图找出一种便捷的设置零、极点的方法。最后准备再探讨一下关于控制技术
    发表于 08-22 17:39

    yolov11转kmodel,numpy是要降级为1.x吗?

    python3.9,yolo是最新的稳定版,和yolo捆绑pip安装的numpy是2.0.1 错误日志
    发表于 08-11 08:16

    图解单片机功能与应用(完整版)

    从基础知识的介绍出发,图文并茂,直观、系统地介绍了单片机的内部结构、工作原理和应用技巧。全书分为10章,内容包括51单片机编程资源图解、51单片机指令系统图解、汇编语言程序设计图解、输入/输出
    发表于 06-16 16:52

    非常详细的无线充电原理和原理图解

    获取完整文档资料可下载附件哦!!!!如果内容有帮助可以关注、点赞、评论支持一下哦~
    发表于 06-04 15:27

    PID控制原理知识详细文档【推荐下载】

    文档详细介绍了控制系统历程、控制系统概况、反馈控制原理图、闭环控制系统的例子等内容,具体的建议下载查看。 这是部分截图:
    发表于 05-22 17:37

    每周推荐!电子工程师自学资料及各种电路解析

    1、滤波电路(多种设计方案+原理图) 包含下面这几个及其经典的资料相对会对大家详细深入的了解滤波有很大的帮助: 滤波电路及其设计 常见的滤波电路 电源滤波电路 2、电子工程师自学速成
    发表于 05-19 18:20

    漫画图解 电感器 抗干扰元器件指南(全彩PDF版)

    漫画图解电感基础知识(高清PDF) 内容:很形象的漫画和语言图解关于电感器的入门基础知识,让电子初学者也能轻松的看懂电子电路。 纯分享贴,有需要可以直接下载附件获取完整资料! (如果内容有帮助可以关注、点赞、评论支持一下哦~)
    发表于 05-13 15:49

    openstack搭建详细步骤

    openstack搭建详细步骤
    的头像 发表于 05-07 14:05 1605次阅读

    PCB封装图解

    PCB封装图解——详细介绍了各种封装的具体参数,并介绍了如何进行封装制作 纯分享贴,有需要可以直接下载附件获取文档! (如果内容有帮助可以关注、点赞、评论支持一下哦~)
    发表于 04-22 13:44

    110kV变电站典型二次回路图解

    电子发烧友网站提供《110kV变电站典型二次回路图解.pdf》资料免费下载
    发表于 03-31 16:57 5次下载

    无刷电机的绕制和接线方法及实物图解

    下方附件可打开*附件:无刷电机的绕制和接线方法及实物图解.doc
    发表于 03-17 20:00

    数字万用表的使用方法详细图解

    现在,数字式测量仪表已成为主流,有取代模拟式仪表的趋势。与模拟式仪表相 比,数字式仪表灵敏度高,准确度高,显示清晰,过载能力强,便于携带,使用 更简单。下面以 VC9802型数字万用表为例,简单介绍其使用方法和注意事项。 (1)使用方法 a使用前,应认真阅读有关的使用说明书,熟悉电源开关、量程开关、插孔、特 殊插口的作用. b将电源开关置于 ON位置。 c交直流电压的测量:根据需要将量程开关拨至 DCV(直流)或 ACV(交流)的 合适量程,红表笔插入 V/Ω 孔,黑表笔插入 COM孔,并将表笔与被测线路并联, 读数即显示。 d交直流电流的测量:将量程开关拨至 DCA(直流)或 ACA(交流)的合适量程, 红表笔插入 mA孔(<200mA时)或 10A孔(>200mA时),黑表笔插入 COM孔, 并将万用表串联在被测电路中即可。测量直流量时,数字万用表能自动显示极性。 e电阻的测量:将量程开关拨至 Ω 的合适量程,红表笔插入 V/Ω 孔,黑表笔 插入 COM孔。如果被测电阻值超出所选择量程的最大值,万用表将显示 1 , 这时应选择更高的量程。测量电阻时,红表笔为正极,黑表笔为负极,这与指针 式万用表正好相反。因此,测量晶体管、电解电容器等有极性的元器件时,必须 注意表笔的极性。 (2).使用注意事项 a如果无法预先估计被测电压或电流的大小,则应先拨至最高量程挡测量一次, 再视情况逐渐把量程减小到合适位置。测量完毕,应将量程开关拨到最高电压挡, 并关闭电源。 b满量程时,仪表仅在最高位显示数字 1 ,其它位均消失,这时应选择更高 的量程。 c测量电压时,应将数字万用表与被测电路并联。测电流时应与被测电路串联, 测直流量时不必考虑正、负极性。 d当误用交流电压挡去测量直流电压,或者误用直流电压挡去测量交流电压时, 显示屏将显示 000 ,或低位上的数字出现跳动。 e禁止在测量高电压(220V以上)或大电流(0.5A以上)时换量程,以防止产 生电弧,烧毁开关触点。 f当显示 、 BATT 或 LOWBAT 时,表示电池电压低于工作电压。 一、指针表和数字表的选用: 1、指针表读取精度较差,但指针摆动的过程比较直观,其摆动速度幅度有时也能比较 客观地反映了被测量的大小(比如测电视机数据总线(SDL)在传送数据时的轻微抖动); 数字表读数直观,但数字变化的过程看起来很杂乱,不太容易观看。 2、指针表内一般有两块电池,一块低电压的 1.5V,一块是高电压的 9V 或 15V,其黑 表笔相对红表笔来说是正端。数字表则常用一块 6V 或 9V 的电池。在电阻档,指针表 的表笔输出电流相对数字表来说要大很多,用 R×1¦¸ 档可以使扬声器发出响亮的“哒” 声,用 R×10k¦¸ 档甚至可以点亮发光二极管(LED)。 3、在电压档,指针表内阻相对数字表来说比较小,测量精度相比较差。某些高电压微 电流的场合甚至无法测准,因为其内阻会对被测电路造成影响(比如在测电视机显像管 的加速级电压时测量值会比实际值低很多)。数字表电压档的内阻很大,至少在兆欧级, 对被测电路影响很小。但极高的输出阻抗使其易受感应电压的影响,在一些电磁干扰比 较强的场合测出的数据可能是虚的。 4、总之,在相对来说大电流高电压的模拟电路测量中适用指针表,比如电视机、音响 功放。在低电压小电流的数字电路测量中适用数字表,比如 BP 机、手机等。不是绝对 的,可根据情况选用指针表和数字表。 文件过大,大家下载附件查看全文哦!
    发表于 03-05 15:15

    详细锂电池生产过程图解

    “锂电池”,是一类由锂金属或锂合金为负极材料、使用非水电解质溶液的电池。由于锂金属的化学特性非常活泼,使得锂金属的加工、保存、使用,对环境要求非常高。锂电池大致可分为两类:锂金属电池和锂离子电池。锂离子电池不含有金属态的锂,并且是可以充电的。我们所熟知的特斯拉电动汽车便是用的18650锂离子电池通过串并联组成的电池板。 下面将图文解读锂电池21道生产工序,了解锂电池的制造过程。   第一步:负极匀浆。     第二步:
    的头像 发表于 02-19 10:48 2955次阅读
    超<b class='flag-5'>详细</b>锂电池生产过程<b class='flag-5'>图解</b>

    使用micropython的ulab.numpy切片将RGB888的NHWC格式转换为RGBP888的NCHW格式,速度非常慢怎么解决?

    转换代码如下.每次转换需要花费200ms以上. rgb888_img_np = rgb888_img.to_numpy_ref()rgb888p_img_np = np.zeros((3
    发表于 02-08 07:25