国外大神的NumPy可视化教程

A Visual Intro to NumPy and Data Representation(NumPy可视化)
01.png

NumPy是python生态系统中数据分析、机器学习和科学计算的主力。它极大地简化了操作、处理向量和矩阵。python的一些主要包都依赖于NumPy(例如scikit-learn、SciPy、panda和tensorflow)。除了能够分割数字数据之外,掌握numpy还将为您在处理和调试这些库中的高级用法时提供优势。
在这篇文章中,我们将介绍使用NumPy的一些主要方法,以及在将它们提供给机器学习模型之前,它如何表示不同类型的数据(表、图像、文本等等)。

import numpy as np

Creating Arrays(创建数组)

我们可以创建一个NumPy数组(也就是强大的ndarray),创建方法是传递一个python列表并使用' np.array() '。在本例中,python创建了我们可以在这里看到的数组:


02.png

通常情况下,我们希望NumPy为我们初始化数组的值。NumPy为这些情况提供了像ones()、zeros()和random.random()这样的方法。我们只需要把我们想要生成的元素的数量传递给他们:


03.png

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

Array Arithmetic(数组运算)

让我们创建两个NumPy数组来展示它们的用处。我们称它们为dataones:

04.png

将它们按位置相加(即添加每一行的值)就像输入data + ones一样简单:
05.png

当我开始学习这些工具时,我发现这样的抽象使我不必在循环中编写这样的计算程序,这让我耳目一新。这是一个很好的抽象概念,可以让你在更高的层次上思考问题。
我们不仅可以这样做:
06.png

通常情况下,我们希望在数组和单个数字之间执行操作(我们也可以将此称为向量和标量之间的操作)。例如,我们的数组以英里为单位表示距离,我们想把它转换成千米。我们简单地说data* 1.6:
07.png

看到NumPy是如何理解这个操作的了吗?这个概念叫做广播,它非常有用。

Indexing(索引)

我们可以索引和切片NumPy数组的所有方法,我们可以切片python列表:


08.png

聚合

NumPy给我们的额外好处是聚合功能:


09.png

除了min,max,还有比如用mean得到平均值,戳得到所有元素相乘的结果,std得到标准差,还有很多其他的。

In more dimensions(更多维度)

我们看过的所有例子都是关于一维向量的。NumPy美丽的一个关键部分是它能够将我们目前看到的所有内容应用到任意数量的维度。

Creating Matrices(创建矩阵)

我们可以传递python列表的列表的形状如下,让NumPy创建一个矩阵来表示它们:

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

10.png

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

Matrix Arithmetic(矩阵运算)

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


12.png

只有当不同维数为1(例如,矩阵只有一列或一行)时,我们才可以对不同大小的矩阵执行这些算术操作,在这种情况下,NumPy使用它的广播规则来执行该操作


00.png

Dot Product(点积)

算术的一个关键区别是使用点积的矩阵乘法。NumPy给每个矩阵一个点()方法,我们可以用它来执行点积操作与其他矩阵:


14.png

我在这个图的底部添加了矩阵维数来强调这两个矩阵必须有相同的维数在它们彼此面对的一边。你可以把这个操作想象成这样:


15.png

Matrix Indexing(矩阵索引)

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


16.png

Matrix Aggregation(矩阵聚合)

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

17.png

我们不仅可以在矩阵中聚合所有的值,还可以使用axis参数跨行或跨列聚合:
18.png

Transposing and Reshaping(置换和重塑)

处理矩阵时,一个常见的需要是旋转它们。这通常是当我们需要取两个矩阵的点积并且需要对齐它们共享的维数时的情况。NumPy数组有一个方便的性质称为T来得到矩阵的转置:

19.png

在更高级的用例中,您可能会发现自己需要切换某个矩阵的维数。在机器学习应用程序中,这通常是这样的情况:某个模型期望输入的形状与数据集不同。NumPy的reshape()方法在这些情况下很有用。你只要把矩阵的新维数传递给它。你可以通过-1作为一个维度,NumPy可以根据你的矩阵推断出正确的维度:
20.png

Yet More Dimensions(更多的尺寸)

NumPy可以做我们在任意维数中提到的所有事情。它的中心数据结构被称为ndarray (n维数组)是有原因的。

21.png

在很多情况下,处理一个新的维度只是在NumPy函数的参数中添加一个逗号:
22.png

注意:请记住,当您打印一个三维NumPy数组时,文本输出显示的数组与这里显示的不同。NumPy打印n维数组的顺序是,最后一个轴是最快的,而第一个轴是最慢的。这意味着np.ones((4,3,2))将打印为:

array([[[1.,1.],
        [1.,1.],
        [1.,1.]],
        
        [[1.,1.],
         [1.,1.],
         [1.,1.]],
         
        [[1.,1.],
         [1.,1.],
         [1.,1.]],
         
        [[1.,1.],
         [1.,1.],
         [1.,1.]]])

Practical Usage(实际使用情况)

现在是回报。下面是一些NumPy将帮助您完成的有用事情的示例。

Formulas(公式)

实现用于矩阵和向量的数学公式是考虑NumPy的一个关键用例。这就是为什么NumPy是科学python社区的宠儿。例如,考虑处理回归问题的监督机器学习模型的核心均方误差公式:


23.png

实现这一点在NumPy中很容易:


Image22.png

这种方法的好处在于,numpy并不关心预测和标签是否包含一个或1000个值(只要它们的大小相同)。我们可以通过一个例子依次通过这一行代码中的四个操作:
Image23.png

预测和标签向量都包含三个值。也就是说n的值是3。我们做减法之后,得到的值是这样的:


Image24.png

然后我们可以平方向量中的值:
Image25.png

现在我们对这些值求和:
Image26.png

这将导致预测的误差值和模型的质量评分。

Data Representation()

考虑所有需要处理和构建模型的数据类型(电子表格、图像、音频……等等)。它们中的许多都非常适合用n维数组表示:

Tables and Spreadsheets(表和电子表格)

  • 电子表格或值表是二维矩阵。电子表格中的每个工作表都可以是它自己的变量。python中最流行的抽象是panda dataframe,它实际上使用NumPy并在其上构建。


    Image27.png

Audio and Time series(音频和时间序列)

  • 音频文件是一维的样本数组。每个样本都是一个数字,表示音频信号的一小块。cd质量的音频每秒可能有44,100个样本,每个样本是-32767到32768之间的整数。这意味着,如果您有一个cd质量的10秒波形文件,您可以将其加载到长度为10 * 44,100 = 441,000个示例的NumPy数组中。想要提取音频的第一秒吗?只需将文件加载到我们将调用audio的NumPy数组中,并获得audio[:44100]。
    下面是一段音频文件:


    Image28.png

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

Images(图片)

  • 图像是由大小(高x宽)像素组成的矩阵。
  • 如果图像是黑白的(也称为灰度),每个像素可以用一个数字表示(通常在0(黑色)和255(白色)之间)。想要裁切图像左上方10×10像素的部分吗?只需告诉NumPy获取图像[:10,:10]。


    Image29.png
  • 如果图像是彩色的,那么每个像素由三个数字表示——分别代表红色、绿色和蓝色。在这种情况下,我们需要一个三维空间(因为每个单元格只能包含一个数字)。因此,彩色图像由尺寸为(高x宽x 3)的ndarray表示。


    Image30.png

Language(语言)

如果我们处理文本,情况就有些不同了。文本的数字表示需要构建词汇表(模型知道的所有惟一单词的清单)和嵌入步骤。让我们看看用数字来表示这句话(翻译过来)的步骤:
“在我之前的吟游诗人有什么主题没有唱出来吗?”
一个模型需要查看大量的文本,然后才能用数字表示这位战士诗人焦虑的文字。我们可以继续让它处理一个小的数据集,并使用它来构建一个词汇表(71,290个单词):

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

推荐阅读更多精彩内容

  • 基础篇NumPy的主要对象是同种元素的多维数组。这是一个所有的元素都是一种类型、通过一个正整数元组索引的元素表格(...
    oyan99阅读 5,133评论 0 18
  • 先决条件 在阅读这个教程之前,你多少需要知道点python。如果你想从新回忆下,请看看Python Tutoria...
    舒map阅读 2,584评论 1 13
  • 一、基础知识点 1.ajax可以做事情:局部刷新 浏览器搜索列表记录 加载更多的数据2.登录页面同步网络请求:页...
    Xcode8阅读 601评论 0 6
  • 微信公众号ID:Eva-part 【伊娃女王学院】嫁了高富帅,生了龙凤胎,住别墅开小跑的美妇人沉香问: 伊娃,我跟...
    离经叛道的伊娃阅读 577评论 0 1
  • 要做开发,前提肯定是先搭建好开发环境,Flutter环境搭建比较简单,直接查看官网即可,如果不想看英文的,也可以去...
    IT晴天阅读 341评论 1 3