深度学习入门02-NumPy-2

上一篇文章我们介绍一下NumPy的导入、生成一维数组、数组算术运算和多维数组。下面我们学习NumPy的广播机制和如何访问数组元素等内容。

5 广播(broadcast )

NumPy中,形状不同的数组之间也可以进行运算。 之前的例子中,在2×2的矩阵 A和标量 10之间进行了乘法运算。在这个过程中,如下图所示,标量 10被扩展成了2 × 2的形状,然后再与矩阵 A进行乘法运算。这个巧妙
的功能称为广播(broadcast)。



我们通过下面这个运算再来看一个广播的例子。

In[28]: A = np.array([[1, 2], [3, 4]])
In[29]: B = np.array([10, 20])
In[30]: A * B
Out[30]: 
array([[10, 40],
       [30, 80]])

这个运算如下图所示:


可以看到一维数组B在运算时,触发广播机制,被“巧妙地”变成了和二维数组A相同的形状,然后再以element-wise的方式进行运算。

综上,广播(Broadcast)是 NumPy对不同形状(shape)的数组进行数值计算的方式, 对数组的算术运算通常在相应的元素上进行。如果两个数组 a 和 b 形状相同,即满足 a.shape == b.shape,那么 a*b 的结果就是 a 与 b 数组对应位相乘。这要求维数相同,且各维度的长度相同。当运算中的 2 个数组的形状不同时,numpy 将自动触发广播机制。

下面介绍一下广播的规则:

  • 让所有输入数组都向其中形状最长的数组看齐,形状中不足的部分都通过在前面加 1 补齐。
  • 输出数组的形状是输入数组形状的各个维度上的最大值。
  • 如果输入数组的某个维度和输出数组的对应维度的长度相同或者其长度为 1 时,这个数组能够用来计算,否则出错。
  • 当输入数组的某个维度的长度为 1 时,沿着此维度运算时都用此维度上的第一组值。

简单理解:对两个数组,分别比较他们的每一个维度(若其中一个数组没有当前维度则忽略),满足:

  • 数组拥有相同形状。
  • 当前维度的值相等。
  • 当前维度的值有一个是 1。

若条件不满足,抛出 "ValueError: frames are not aligned" 异常。

因为NumPy有广播功能,所以满足广播规则的不同形状的数组之间也可以顺利地进行运算 。

6 访问元素

元素的索引从0开始。对各个元素的访问可按如下方式进行。

In[31]: X = np.array([[51, 55], [14, 19], [0, 4]])
In[32]: print(X)
[[51 55]
 [14 19]
 [ 0  4]]
In[33]: X[0] # 第0行
Out[33]: array([51, 55])
In[34]: X[0][1] # (0,1)的元素
Out[34]: 55

也可以使用 for语句访问各个元素。

In[35]: for row in X:
   ...:     print(row)
   ...:     
[51 55]
[14 19]
[0 4]

除了前面介绍的索引操作, NumPy还可以使用flatten方法将当前数组转换为一维数组,再访问各个元素。

In[36]: X = X.flatten() # 将X转换为一维数组
In[37]: X
Out[37]: array([51, 55, 14, 19,  0,  4])
In[38]: X[np.array([0, 2, 4])] # 获取索引为0、 2、 4的元素
Out[38]: array([51, 14,  0])

运用这个标记法,可以获取满足一定条件的元素。例如,要从 X中抽出大于15的元素,可以写成如下形式。

In[39]: X > 15
Out[39]: array([ True,  True, False,  True, False, False])
In[40]: X[X > 15]
Out[40]: array([51, 55, 19])

对NumPy数组使用不等号运算符等(上例中是 X > 15),结果会得到一个布尔型的数组。上例中就是使用这个布尔型数组取出了数组的各个元素(取出 True对应的元素)。

以上就是学习NumPy的主要内容,下面我们将学习绘制图形库——Matplotlib。


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

推荐阅读更多精彩内容

  • 今天是七月二号。早上醒来躺在床上,昨天的一切就好像梦一般,一瞬间无法确定到底有没有发生过。我有没有像以往一样,五点...
    BelovedNutan阅读 234评论 0 0
  • 大学前,对生活无限憧憬,大学后,对生活依然停留在最初;大学前,对所望的大学生活期待,大学后,期待慢慢归为平淡;大学...
    棉花糖的生活阅读 145评论 0 1
  • 工地的领导称呼她大姐,我也叫她大姐。她是这个工地上唯一的女人。她皮肤黝黑,个子不高,身体也不是足够健壮,家里丈夫身...
    气清心远阅读 1,453评论 0 2
  • 放空自己,保持空杯的心态,方能走得更远。 今天上午回看了昨晚播出的《最强大脑》。让我记忆比较深刻的是初始排名100...
    小敏m阅读 308评论 2 5