python广播机制_Numpy广播机制

更多关于: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]])

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值