鍍金池/ 教程/ 數(shù)據(jù)分析&挖掘/ NumPy廣播
NumPy位操作
NumPy數(shù)學(xué)算數(shù)函數(shù)
NumPy高級(jí)索引
NumPy環(huán)境安裝配置
NumPy IO文件操作
NumPy字符串函數(shù)
NumPy切片和索引
NumPy統(tǒng)計(jì)函數(shù)
NumPy矩陣庫(kù)
NumPy數(shù)組創(chuàng)建例程
NumPy線性代數(shù)
NumPy Matplotlib庫(kù)
NumPy教程
NumPy排序、搜索和計(jì)數(shù)函數(shù)
NumPy字節(jié)交換
NumPy Ndarray對(duì)象
NumPy數(shù)組操作
NumPy使用 Matplotlib 繪制直方圖
NumPy數(shù)組屬性
NumPy廣播
NumPy來(lái)自現(xiàn)有數(shù)據(jù)的數(shù)組
NumPy副本和視圖
NumPy在數(shù)組上的迭代
NumPy來(lái)自數(shù)值范圍的數(shù)組
NumPy算數(shù)運(yùn)算
NumPy數(shù)據(jù)類型

NumPy廣播

NumPy - 廣播

術(shù)語(yǔ)廣播是指 NumPy 在算術(shù)運(yùn)算期間處理不同形狀的數(shù)組的能力。 對(duì)數(shù)組的算術(shù)運(yùn)算通常在相應(yīng)的元素上進(jìn)行。 如果兩個(gè)陣列具有完全相同的形狀,則這些操作被無(wú)縫執(zhí)行。

示例 1

import numpy as np 

a = np.array([1,2,3,4]) 
b = np.array([10,20,30,40]) 
c = a * b 
print c

輸出如下:

[10   40   90   160]

如果兩個(gè)數(shù)組的維數(shù)不相同,則元素到元素的操作是不可能的。 然而,在 NumPy 中仍然可以對(duì)形狀不相似的數(shù)組進(jìn)行操作,因?yàn)樗鼡碛袕V播功能。 較小的數(shù)組會(huì)廣播到較大數(shù)組的大小,以便使它們的形狀可兼容。

如果滿足以下規(guī)則,可以進(jìn)行廣播:

  • ndim較小的數(shù)組會(huì)在前面追加一個(gè)長(zhǎng)度為 1 的維度。

  • 輸出數(shù)組的每個(gè)維度的大小是輸入數(shù)組該維度大小的最大值。

  • 如果輸入在每個(gè)維度中的大小與輸出大小匹配,或其值正好為 1,則在計(jì)算中可它。

  • 如果輸入的某個(gè)維度大小為 1,則該維度中的第一個(gè)數(shù)據(jù)元素將用于該維度的所有計(jì)算。

如果上述規(guī)則產(chǎn)生有效結(jié)果,并且滿足以下條件之一,那么數(shù)組被稱為可廣播的

  • 數(shù)組擁有相同形狀。

  • 數(shù)組擁有相同的維數(shù),每個(gè)維度擁有相同長(zhǎng)度,或者長(zhǎng)度為 1。

  • 數(shù)組擁有極少的維度,可以在其前面追加長(zhǎng)度為 1 的維度,使上述條件成立。

下面的例稱展示了廣播的示例。

示例 2

import numpy as np 
a = np.array([[0.0,0.0,0.0],[10.0,10.0,10.0],[20.0,20.0,20.0],[30.0,30.0,30.0]]) 
b = np.array([1.0,2.0,3.0])  
print  '第一個(gè)數(shù)組:'  
print a 
print  '\n'  
print  '第二個(gè)數(shù)組:'  
print b 
print  '\n'  
print  '第一個(gè)數(shù)組加第二個(gè)數(shù)組:'  
print a + b

輸出如下:

第一個(gè)數(shù)組:
[[ 0. 0. 0.]
 [ 10. 10. 10.]
 [ 20. 20. 20.]
 [ 30. 30. 30.]]

第二個(gè)數(shù)組:
[ 1. 2. 3.]

第一個(gè)數(shù)組加第二個(gè)數(shù)組:
[[ 1. 2. 3.]
 [ 11. 12. 13.]
 [ 21. 22. 23.]
 [ 31. 32. 33.]]

下面的圖片展示了數(shù)組b如何通過廣播來(lái)與數(shù)組a兼容。

NumPy廣播