一、概述
在Numpy中当数组进行运算时,如果两个数组的形状相同,那么两个数组相乘就是两个数组的对应位相乘,这是要求维数相乘,并且各维度的长度相同,但是当运算中两个数组的形状不同使时,numpy将会自动触发广播机制,所以我们要了解numpy的广播机制,才能更好的进行数组的运算。
二、Numpy中的广播
1、什么是广播
我们都知道,Numpy中的基本运算(加、减、乘、除、求余等等)都是元素级别的,但是这仅仅局限于两个数组的形状相同的情况下。
可是大家又会发现,如果让一个数组加1的话,结果时整个数组的结果都会加1,这是什么情况呢?
其实这就是广播机制:Numpy 可以转换这些形状不同的数组,使它们都具有相同的大小,然后再对它们进行运算。下面是广播示意图:
术语广播是指 NumPy 在算术运算期间处理不同形状的数组的能力。对数组的算术运算通常在 相应的元素上进行。如果两个阵列具有完全相同的形状,则这些操作被无缝执行。
如果两个数组的维数不相同,则元素到元素的操作是不可能的。然而,在 NumPy 中仍然可以对形状不相似的数组进行操作,因为它拥有广播功能。较小的数组会广播到较大数组的大小,以便使它们的形状可兼容。
如果满足以下条件之一,那么数组被称为可广播的。
- 数组拥有相同形状。数组拥有相同的维数,且某一个或多个维度长度为 1 。数组拥有极少的维度,可以在其前面追加长度为 1 的维度,使上述条件成立
广播的规则:
- 规则 1:如果两个数组的维度数不相同,那么小维度数组的形状将会在最左边补 1。规则 2:如果两个数组的形状在任何一个维度上都不匹配,那么数组的形状会沿着维度 为 1 的维度扩展以匹配另外一个数组的形状。规则 3:如果两个数组的形状在任何一个维度上都不匹配并且没有任何一个维度等于 1, 那么会引发异常。
1.1、形状相同的广播
1.2、相同维度,但其中某一个或多个维度长度为 1 的广播:
1.3、较少的维度,默认在其前面追加长度为 1 的维度:
1.4、如果是标量的话,会广播整个数组上:
2、广播示例
2.1、将数组赋值给a并查看数组的形状
2.2、将数组赋值给b并查看数组的形状
2.3、将数组a转换为4行1列
2.4、数组a+b,并查看形状