術(shù)語(yǔ)廣播是指 NumPy 在算術(shù)運(yùn)算期間處理不同形狀的數(shù)組的能力。 對(duì)數(shù)組的算術(shù)運(yùn)算通常在相應(yīng)的元素上進(jìn)行。 如果兩個(gè)陣列具有完全相同的形狀,則這些操作被無(wú)縫執(zhí)行。
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 的維度,使上述條件成立。
下面的例稱展示了廣播的示例。
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
兼容。