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

image

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

import numpy as np

一、数组操作

1.1创建数组

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

image

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

image

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

1.2 数组算术

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

image

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

image

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

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

image

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

image

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

1.3索引数组

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

image

1.4 数组聚合

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

image

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

二、多维处理

2.1 创建矩阵

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

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

image

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

image

2.2 矩阵算术

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

image

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

image

2.3 点积

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

image

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

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

image

2.4 矩阵索引

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

image

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

2.5 矩阵聚合

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

image

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

image

2.6 转置和重塑

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

image

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

image

2.7 更多维度

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

image

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

image

三、公式计算

我们举一个计算均方误差的例子。实现适用于矩阵和向量的数学公式是考虑NumPy的关键用例。例如均方误差MSE公式,它是监督机器学习、模型处理、回归问题的核心公式:
MSE=\frac{1}{n}∑_{i=1}^n(\hat{y}_i−y_i)^2

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

image

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

image

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

image

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

image

然后求和:

image

结果就是均方误差。

四、数据表示

4.1 表格和电子表格

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

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

image

4.2 音频

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

以下是一段音频文件:

image

4.3 图像

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

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

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

image

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

image
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 156,265评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,274评论 1 288
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,087评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,479评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,782评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,218评论 1 207
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,594评论 2 309
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,316评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,955评论 1 237
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,274评论 2 240
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,803评论 1 255
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,177评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,732评论 3 229
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,953评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,687评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,263评论 2 267
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,189评论 2 258

推荐阅读更多精彩内容

  • 基础篇NumPy的主要对象是同种元素的多维数组。这是一个所有的元素都是一种类型、通过一个正整数元组索引的元素表格(...
    oyan99阅读 5,049评论 0 18
  • 先决条件 在阅读这个教程之前,你多少需要知道点python。如果你想从新回忆下,请看看Python Tutoria...
    舒map阅读 2,538评论 1 13
  • NumPy是Python中关于科学计算的一个类库,在这里简单介绍一下。 来源:https://docs.scipy...
    灰太狼_black阅读 1,202评论 0 4
  • 不想说在见,因为不想分离,又一个开学季,六年级里肯定是做满了人,可那些人,不会在是我们了! 六年级,拜拜了( •̥...
    甜甜圈_510a阅读 47评论 0 1
  • 在看《神奇动物在哪里》的时候,里面的几大神兽我最喜欢嗅嗅,它喜欢一切闪闪发光的东西,只要有bling bling的...
    鯊魚小姐阅读 618评论 14 22