一、概述
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/zh-hant/n/253845.html