第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

首頁 慕課教程 NumPy 入門教程 NumPy 入門教程 Numpy 的數(shù)組運(yùn)算與廣播

Numpy 的數(shù)組運(yùn)算與廣播

廣播,是指 Numpy 在算術(shù)運(yùn)算期間處理不同形狀的數(shù)組的能力。

對(duì)數(shù)組的算術(shù)運(yùn)算通常在相應(yīng)的元素上進(jìn)行。 如果兩個(gè)陣列具有完全相同的形狀,則這些操作被無縫執(zhí)行,這一小節(jié)將通過數(shù)組的運(yùn)算來展示廣播的一些特征。

1. 常見的兩種廣播途徑

1.1 相同大小的數(shù)組計(jì)算

如果兩個(gè)數(shù)組的維度完全一致,那么運(yùn)算過程是兩個(gè)數(shù)組相應(yīng)元素的逐個(gè)計(jì)算。

案例

定義兩個(gè)完全一致的數(shù)組:

arr0 = np.array([[1, 2, 3], [4, 5, 6]])
arr1 = np.array([[5, 5, 5], [5, 5, 5]])

查看數(shù)組結(jié)構(gòu):

arr0
out:
    array([[1, 2, 3],
		[4, 5, 6]])

arr1
out:
    array([[5, 5, 5],
       [5, 5, 5]])

查看加法運(yùn)算的結(jié)果:

arr0 + arr1
out:
    array([[ 6,  7,  8],
       [ 9, 10, 11]])

查看乘法運(yùn)算的結(jié)果:

arr0 * arr1
out:
    array([[ 5, 10, 15],
       [20, 25, 30]])

可以看到,如果數(shù)組的維度一致,那么廣播則是對(duì)應(yīng)位置的元素運(yùn)算。

1.2 數(shù)組與標(biāo)量的計(jì)算

廣播機(jī)制的存在,允許運(yùn)算發(fā)生在不同維度的數(shù)組之間,其中最典型的場(chǎng)景,是數(shù)組的標(biāo)量的計(jì)算。所謂的標(biāo)量,我們可以簡(jiǎn)單地將之視為是0維的數(shù)組。

案例

對(duì)于加法運(yùn)算:

arr0 + 5
out:
    array([[ 6,  7,  8],
       [ 9, 10, 11]])

對(duì)于乘法運(yùn)算

arr0 * 5
out:
    array([[ 5, 10, 15],
       [20, 25, 30]])

對(duì)于冪運(yùn)算:

arr0 ** 5
out:
    array([[   1,   32,  243],
       [1024, 3125, 7776]], dtype=int32)

可以發(fā)現(xiàn),對(duì)于上述效果,是數(shù)組每個(gè)元素分別與標(biāo)量進(jìn)行運(yùn)算的結(jié)果。

直觀地,我們發(fā)現(xiàn),標(biāo)量在這個(gè)二維數(shù)組上發(fā)生了傳播(廣播),標(biāo)量沿著數(shù)組的兩個(gè)維度擴(kuò)散,直至擴(kuò)散的結(jié)果和待計(jì)算的二維數(shù)組一致,最后進(jìn)行計(jì)算。

2. 不同維度的數(shù)組運(yùn)算

2.1 沿著一個(gè)維度進(jìn)行廣播

一種簡(jiǎn)單的場(chǎng)景是,兩個(gè)數(shù)組有一定的相似性,即數(shù)組(n×m)和數(shù)組(1,m)。

案例

arr2 = np.array([[10, 20, 30]])
arr2
out:
    array([[10, 20, 30]])

觀察不同大小的數(shù)組的廣播規(guī)則:

arr0 + arr2
out:
    array([[11, 22, 33],
       [14, 25, 36]])
arr0 * arr2
out:
    array([[ 10,  40,  90],
       [ 40, 100, 180]])

觀察發(fā)現(xiàn),arr2沿著arr0的第二個(gè)維度擴(kuò)展了,擴(kuò)展到二者相匹配,再進(jìn)行了對(duì)應(yīng)的計(jì)算。

可以用一張簡(jiǎn)圖來進(jìn)行描述相加的過程:
圖片描述

廣播 1

2.2沿著兩個(gè)維度同時(shí)廣播

涉及到兩個(gè)維度同時(shí)廣播,則相對(duì)復(fù)雜一些。

案例

arr3 = np.array([[10], [20], [30]])
arr3
out:
    array([[10],
       [20],
       [30]])

觀察沿著2個(gè)方向同時(shí)廣播的過程:

arr2 + arr3
out:
    array([[20, 30, 40],
       [30, 40, 50],
       [40, 50, 60]])

上述廣播的過程可以按照如下示意進(jìn)行描述:

圖片描述

廣播 2

2.3 廣播的規(guī)則

所以根據(jù)上述案例,可以把廣播規(guī)則簡(jiǎn)單總結(jié)如下:

  • 讓所有輸入數(shù)組都向其中形狀最長(zhǎng)的數(shù)組看齊,形狀中不足的部分都通過在前面加 1 補(bǔ)齊;
  • 輸出數(shù)組的形狀是輸入數(shù)組形狀的各個(gè)維度上的最大值;
  • 如果輸入數(shù)組的某個(gè)維度和輸出數(shù)組的對(duì)應(yīng)維度的長(zhǎng)度相同或者其長(zhǎng)度為 1 時(shí),這個(gè)數(shù)組能夠用來計(jì)算,否則出錯(cuò);
  • 當(dāng)輸入數(shù)組的某個(gè)維度的長(zhǎng)度為 1 時(shí),沿著此維度運(yùn)算時(shí)都用此維度上的第一組值。

3. 小結(jié)

本節(jié)以數(shù)組的運(yùn)算為基礎(chǔ),介紹了數(shù)組在算術(shù)運(yùn)算期間的廣播規(guī)則。在實(shí)際使用中,廣播的規(guī)則強(qiáng)大且靈活,當(dāng)條件不滿足時(shí),則會(huì)拋出 ValueError: frames are not aligned 異常,需要注意。