前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python数据分析(6)-numpy广播机制

Python数据分析(6)-numpy广播机制

作者头像
锦小年
发布2019-05-26 10:32:42
5460
发布2019-05-26 10:32:42
举报
文章被收录于专栏:锦小年的博客锦小年的博客

numpy的广播机制旨在提供一种当被处理数组维度大小不一样时仍然能计算的机制。首先要明白,在数组(或者说是向量,数组的本质就是多维向量的组合)计算时,除了一些特殊的计算(点乘等),其他操作都是元素一一对应的操作,它要求被处理的数组的维度以及每个维度大小相等。但是,许多计算中,想要一个维度对其他所有维度操作,此时被操作的数组的大小不一样,但numpy采用广播机制来处理这个问题。

代码语言:javascript
复制
import numpy as np 
a = np.arange(16)
a.shape=(4,4)
print('a 数据为:',a)
b = np.array([1,2,3,4])
print('b 数组为:',b)

print('a+b 的结果是:',a+b)

输出结果:

代码语言:javascript
复制
a 数据为: 
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]
b 数组为: [1 2 3 4]
a+b 的结果是: 
[[ 1  3  5  7]
 [ 5  7  9 11]
 [ 9 11 13 15]
 [13 15 17 19]]

事实上,它是把b变成a的维度大小,也就是将[1,2,3,4] 复制4次并增加一个维度:

代码语言:javascript
复制
[[1 2 3 4]
[1 2 3 4]
[1 2 3 4]
[1 2 3 4]]

再与a对应元素相加。 同样,我们把加变为乘(这里的乘是叉乘,对应元素的乘积)

代码语言:javascript
复制
import numpy as np 
a = np.arange(16)
a.shape=(4,4)
print('a 数据为:',a)
b = np.array([1,2,3,4])
print('b 数组为:',b)

print('a*b 的结果是:',a*b)

输出:

代码语言:javascript
复制
a 数据为: 
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]
b 数组为: [1 2 3 4]
a*b 的结果是: 
[[ 0  2  6 12]
 [ 4 10 18 28]
 [ 8 18 30 44]
 [12 26 42 60]]

最后,说一说numpy广播机制的原理,如图所示:

这里写图片描述
这里写图片描述

在操作的过程中,先把小维度的数据变为大维度数组的维度,图中将b的第一行复制4次组成与a一样的大小再操作。

notes 在实际使用中需要灵活使用,但同时也要注意该机制可能带来的误操作,例如代码写错但仍能得到结果。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年07月15日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档