一、概述
numpy.broadcast是numpy中实现数组广播运算的核心函数。它可以将不同形状的数组在计算时扩展到同一形状,从而支持对多维数组的广播运算。广播运算是numpy的重要特性,使得我们能够在不改变数组形状的前提下对不同形状数组进行计算,大大简化了我们的计算任务。
在numpy中,广播的原则可以概括为:如果两个数组在任一个维度上的形状大小相同,或其中有一个数组在该维度大小为1,则它们是可广播的,可以进行相应的数学运算。numpy.broadcast的作用就是把不同形状的数组进行自动的扩展,使得它们能够在统一的形状下进行运算。
二、基本用法
numpy.broadcast支持多个数组的广播操作,我们通过下面的代码实现两个不同形状数组的广播操作:
import numpy as np a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) c = a + b print(c)
运行结果如下:
[5 7 9]
在这个例子里,首先我们创建了两个形状不同的数组a和b,它们的形状分别为(3,)和(3,)。然后我们对它们进行广播运算,使用了运算符+,计算结果被保存在数组c中。在这个过程中,numpy.broadcast函数实现了自动的形状扩展,将数组a和b都扩展成了同样的形状(3,),使得它们能够进行相应的数学运算。
需要注意,numpy.broadcast函数是在运算符后面调用的,它会对参与运算的数组进行自动的扩展。因此,在对多个数组进行广播运算时,可以逐个地对它们进行运算操作,最终得到我们想要的计算结果。
三、广播规则
1、广播的概念
在numpy中广播操作的目的是为了进行形状不同的数组之间的运算操作。广播的原则可以概括为:
(1) 如果两个数组在任一个维度上的形状大小相同,或其中有一个数组在该维度大小为1,则它们是可广播的;
(2) 如果两个数组在某个维度上的形状大小都不相同,且其中有一个数组在该维度大小不为1,则这两个数组是不兼容的,不能进行广播计算。
2、数组的扩展
在广播操作中,如果某个数组的形状大小为1,则可以对它进行扩展,就是重复该数组的元素,直到其形状与另一个数组的形状匹配。例如:
import numpy as np a = np.array([1, 2, 3]) b = np.array([4]) c = a + b print(c)
在这个例子中,数组b的形状是(1,),其值为4。运算符+对数组a和b进行计算时,会将数组b的形状扩展为(3,),然后再进行计算,得到的结果存储在数组c中。
3、矩阵的扩展
在广播操作中,如果某个数组是二维数组,而另一个是一维数组,则一维数组会通过行扩展或者列扩展来与二维数组匹配。例如:
import numpy as np a = np.array([[1,2,3], [4,5,6], [7,8,9]]) b = np.array([1,0,1]) c = a + b print(c)
在这个例子中,数组b的形状是(3,),它会通过行扩展变为二维数组(3,3),然后再与数组a进行运算获得结果数组c(3,3)。
4、广播的应用
使用numpy的广播功能,可以实现不同形状的数组之间的运算操作,这对于数组之间的相加、相减、相除、与比较等等操作提供了非常便利的方式。例如:
import numpy as np a = np.array([[1,2,3], [4,5,6], [7,8,9]]) b = np.array([1,0,1]) c = a > b print(c)
在这个例子中,数组b的形状是(3,),它会通过行扩展变为二维数组(3,3),然后再与数组a进行比较运算,并返回一个布尔数组。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/253845.html