【MindSpore易点通】数据处理之Numpy数组的广播计算

简介

在之前的分享中,对shape相同的数组进行计算非常方便。如果遇到了两个shape不同的数组,可以怎么计算呢?NumPy自带的一种广播机制可以满足这种需求,本次和大家一起探讨学习下。

广播

广播机制的意义:广播描述了在算术运算期间NumPy如何处理具有不同形状的数组。受某些约束条件的限制,较小的数组会在较大的数组中“广播”,以便它们具有兼容的形状。

在对两个数组进行操作时,NumPy按元素对它们的形状进行比较。下面用两个shape(4,3)的数组计算实例进行演示说明。

【MindSpore易点通】数据处理之Numpy数组的广播计算_第1张图片

上面的两个shape(4,3)的数组计算很好理解,就是按照规则把对应位置上的元素进行计算,得到计算结果。下面再进行广播机制下的计算。广播机制是自动的,当满足可广播条件时,就会自动的进行广播计算。所以并不需要提前设置参数。

根据结果看出,两次计算是等价的。本次进行计算的两个数组的shape是不一样的,shape(arr1)=(4,3)、shape(arr2)=(3, )。那么广播机制就是用补齐的方法,把两个数组补成shape一致进行计算,用一个可视化图帮助理解,如下图所示。

【MindSpore易点通】数据处理之Numpy数组的广播计算_第2张图片

NumPy按元素对它们的形状进行比较。比较的过程是从尾随维度(从内到外)开始的。如上面示例中,shape(arr2)=(3, )满足可广播成然后shape(arr1)=(4,3)的条件,所以arr2就会沿着轴0上进行广播,广播成同一形状后完成计算。广播的方式也不是在固定轴上的,再继续尝试下不同形状的数组,可以比较出效果。

【MindSpore易点通】数据处理之Numpy数组的广播计算_第3张图片

这里的arr1的shape(4,3),arr2的shape(4,1),它们都是二维的,但是第二个数组在1轴上的长度为1,所以需要沿着轴1轴方向进行广播。广播可视化效果如下图中所示。当然也适用在更多维的数组中。

【MindSpore易点通】数据处理之Numpy数组的广播计算_第4张图片

上面两次的广播计算中使用的两个数组维数仅差1或者0,所以只进行一次广播便可以具有相同形状,那么如果两个数组相差更多维还可以完成广播计算吗,所以创建shape(2,2,3,4)的arr1,shape(4, )的arr2。再看下效果。

得出了计算结果,所以相差多维也依然是可行的,再看下这次广播都做了哪些事情。广播计算是以广播维数小的数组以适应维数大的数组进行计算,维数大的数组是这样的。

【MindSpore易点通】数据处理之Numpy数组的广播计算_第5张图片

这里arr2进行了3次广播具有了和arr1相同的形状,如上图所示。

通过多次的尝试可以发现,任何形状的任意数量的数组可以一起广播的定义:满足其广播后的数组具有相同数量的维度,每个维度的长度是公共长度或1。当然,如果我们进行广播的数组的形状不同,那么广播的顺序也不同。

总结

本次分享通过示例演示说明了NumPy中的广播机制的计算原理和计算的效果。通过多次的尝试也发现进行广播计算时数组需要满足其广播后的数组具有相同数量的维度,每个维度的长度是公共长度或1的条件。

谢谢浏览,文中若有错误之处,还请不吝赐教。

你可能感兴趣的:(numpy,python,机器学习)