numpy数组按某一维度相加_Numpy中的广播和数组运算

c9325f7feb8640efba58614e4c464a86

一、概述

在Numpy中当数组进行运算时,如果两个数组的形状相同,那么两个数组相乘就是两个数组的对应位相乘,这是要求维数相乘,并且各维度的长度相同,但是当运算中两个数组的形状不同使时,numpy将会自动触发广播机制,所以我们要了解numpy的广播机制,才能更好的进行数组的运算。

二、Numpy中的广播

1、什么是广播

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

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

899cb5e85d384bc6a7c40a331721bffb
dcf61bfeb3d94c629295ffcc2a3c528e
6561b8915d05471caf835a647b5bad18
ca07fda3fb1948e5b6af17584c9af367
2b950259b93241f5b83e41b7e9ecb9c9
c827c1b40849424282d78595e1421b77

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

997e71ca5cfb455bb272466176069298

术语广播是指 NumPy 在算术运算期间处理不同形状的数组的能力。对数组的算术运算通常在 相应的元素上进行。如果两个阵列具有完全相同的形状,则这些操作被无缝执行。

如果两个数组的维数不相同,则元素到元素的操作是不可能的。然而,在 NumPy 中仍然可以对形状不相似的数组进行操作,因为它拥有广播功能。较小的数组会广播到较大数组的大小,以便使它们的形状可兼容。

如果满足以下条件之一,那么数组被称为可广播的。

  • 数组拥有相同形状。数组拥有相同的维数,且某一个或多个维度长度为 1 。数组拥有极少的维度,可以在其前面追加长度为 1 的维度,使上述条件成立

广播的规则:

  • 规则 1:如果两个数组的维度数不相同,那么小维度数组的形状将会在最左边补 1。规则 2:如果两个数组的形状在任何一个维度上都不匹配,那么数组的形状会沿着维度 为 1 的维度扩展以匹配另外一个数组的形状。规则 3:如果两个数组的形状在任何一个维度上都不匹配并且没有任何一个维度等于 1, 那么会引发异常。

1.1、形状相同的广播

b0c0a392b64046ba8de030fb704fb736

1.2、相同维度,但其中某一个或多个维度长度为 1 的广播:

9adc65aee64547d29ed4efaa52bd0176

1.3、较少的维度,默认在其前面追加长度为 1 的维度:

1ee42931fc314414b3245e089f32b5e6

1.4、如果是标量的话,会广播整个数组上:

312853f4d0614a61b347096659228e65

2、广播示例

2.1、将数组赋值给a并查看数组的形状

17098e4644ae46d39930f06f3fee3851

2.2、将数组赋值给b并查看数组的形状

45fd309fe228471681ebe4b6e3d9bf08

2.3、将数组a转换为4行1列

84ce163fa1744674b9d2602c5dd2ab33

2.4、数组a+b,并查看形状

8203f9d894c440be8dd1373b75d967f0
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值