Numpy 修炼之道 (9)—— 广播机制

什么是广播

我们都知道,Numpy中的基本运算(加、减、乘、除、求余等等)都是元素级别的,但是这仅仅局限于两个数组的形状相同的情况下。

可是大家又会发现,如果让一个数组加1的话,结果时整个数组的结果都会加1,这是什么情况呢?

>>> x = np.arange(3)
>>> x
array([0, 1, 2])
>>> x + 1
array([1, 2, 3])

其实这就是广播机制:Numpy 可以转换这些形状不同的数组,使它们都具有相同的大小,然后再对它们进行运算。给出广播示意图:

numpy 广播示意图

小提示:图片不清的话可点击 阅读原文

广播示例

接下来我们通过实际代码验证下:

>>> a = np.arange(0, 40, 10)
>>> a.shape
(4L,)
>>> a
array([ 0, 10, 20, 30])
>>> b = np.array([0, 1, 2])
>>> b.shape
(3L,)
>>> b
array([0, 1, 2])
>>> a = a[:, np.newaxis] # 转换a的维度(形状)
>>> a.shape
(4L, 1L)
>>> a
array([[ 0],
       [10],
       [20],
       [30]])
>>> a + b
array([[ 0,  1,  2],
       [10, 11, 12],
       [20, 21, 22],
       [30, 31, 32]])

明显可以看出,相加前 a 的形状为 (4, 1), b 的形状为 (3, ), a+b 的结果的形状为(4, 3)。计算时,变换结果与上图类似,这里来详细介绍下:

>>> a
array([[ 0],
       [10],
       [20],
       [30]])
>>> a2 = np.array(([ i * 3 for i in a.tolist()])) # 会先将a转为a2
>>> a2
array([[ 0,  0,  0],
       [10, 10, 10],
       [20, 20, 20],
       [30, 30, 30]])
>>> b
array([0, 1, 2])
>>> b2 = np.array([b.tolist()] * 4) # 再将b转为b2
>>> b2
array([[0, 1, 2],
       [0, 1, 2],
       [0, 1, 2],
       [0, 1, 2]])
>>> a2 + b2 # a2 + b2的结果就是 a + b 的结果
array([[ 0,  1,  2],
       [10, 11, 12],
       [20, 21, 22],
       [30, 31, 32]])

作者:无邪,个人博客:脑洞大开,专注于机器学习研究。

原文发布于微信公众号 - 脑洞科技栈(naodong-open)

原文发表时间:2018-03-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏北京马哥教育

python实现拼写检查器21行轻松搞定

除了这段代码外,作为机器学习的一部分,肯定还应该有大量的样本数据,准备了big.txt作为我们的样本数据。

17150
来自专栏Jack-Cui

Caffe学习笔记(四):使用pycaffe生成train.prototxt、test.prototxt文件

Python版本: Python2.7 运行平台: Ubuntu14.04 一、前言     了解到上一篇笔记的内容,就可以尝试自己编写python程序生...

1.2K60
来自专栏简书专栏

基于tensorflow的MNIST数据集手写数字分类预测

MNIST是Mixed National Institue of Standards and Technology database的简称,中文叫做美国国家标准...

21030
来自专栏北京马哥教育

python实现拼写检查器21行轻松搞定

引入 大家在使用谷歌或者百度搜索时,输入搜索内容时,谷歌总是能提供非常好的拼写检查,比如你输入 speling,谷歌会马上返回 spelling。 下面是用...

37940
来自专栏IT派

TensorFlow中的那些高级API

摘要: 在这篇文章中,我们将看到一个使用了最新高级构件的例子,包括Estimator(估算器)、Experiment(实验)和Dataset(数据集)。值得注...

54550
来自专栏人工智能LeadAI

基于Tensorflow实现多层感知机网络MLPs

github:https://github.com/sladesha/deep_learning

12320
来自专栏IT派

【深度学习入门系列】TensorFlow训练线性回归

作者:董超 来源:腾讯云技术社区「腾云阁」 上一篇文章我们介绍了 MxNet 的安装,但 MxNet 有个缺点,那就是文档不太全,用起来可能是要看源代码才能理...

33930
来自专栏ATYUN订阅号

面向纯新手的TensorFlow.js速成课程

本课程由CodingTheSmartWay.com出品,在本系列的第一部分中,你将学到:

1K40
来自专栏人工智能LeadAI

深度学习框架之一:Theano | Lasagne简单教程

参考Lasagne官网(http://lasagne.readthedocs.io/en/latest/)tutorial进行总结而来。 01 简介 Lasag...

53450
来自专栏AI研习社

博客 | MNIST 数据集载入线性模型

这节开始我们使用知名的图片数据库 「THE MNIST DATABASE」 作为我们的图片来源,它的数据内容是一共七a万张 28×28 像素的手写数字图片,并被...

16250

扫码关注云+社区

领取腾讯云代金券