欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

如何使用NumPy中的廣播

這篇文章主要講解了“如何使用NumPy中的廣播”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“如何使用NumPy中的廣播”吧!

專注于為中小企業(yè)提供成都網站設計、網站制作服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)靈武免費做網站提供優(yōu)質的服務。我們立足成都,凝聚了一批互聯(lián)網行業(yè)人才,有力地推動了超過千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網站建設實現規(guī)模擴充和轉變。

基礎廣播

正常情況下,兩個數組需要進行運算,那么每個數組的對象都需要有一個相對應的值進行計算才可以。比如下面的例子:

a = np.array([1.0, 2.0, 3.0])b = np.array([2.0, 2.0, 2.0])a * b
array([ 2.,  4.,  6.])

但是如果使用Numpy的廣播特性,那么就不必須元素的個數準確對應。

比如,我們可以講一個數組乘以常量:

a = np.array([1.0, 2.0, 3.0])
>>> b = 2.0
>>> a * b
array([ 2.,  4.,  6.])

下面的例子和上面的例子是等價的,Numpy會自動將b進行擴展。

NumPy足夠聰明,可以使用原始標量值而無需實際制作副本,從而使廣播操作盡可能地節(jié)省內存并提高計算效率。

第二個示例中的代碼比第一個示例中的代碼更有效,因為廣播在乘法過程中移動的內存更少(b是標量而不是數組)。

廣播規(guī)則

如果兩個數組操作,NumPy會對兩個數組的對象進行比較,從最后一個維度開始,如果兩個數組的維度滿足下面的兩個條件,我們就認為這兩個數組是兼容的,可以進行運算:

  1. 維度中的元素個數是相同的

  2. 其中一個維數是1

如果上面的兩個條件不滿足的話,就會拋出異常: ValueError: operands could not be broadcast together。

維度中的元素個數是相同的,并不意味著要求兩個數組具有相同的維度個數。

比如表示顏色的256x256x3 數組,可以和一個一維的3個元素的數組相乘:

Image  (3d array): 256 x 256 x 3
Scale  (1d array):             3
Result (3d array): 256 x 256 x 3

相乘的時候,維度中元素個數是1的會被拉伸到和另外一個維度中的元素個數一致:

A      (4d array):  8 x 1 x 6 x 1
B      (3d array):      7 x 1 x 5
Result (4d array):  8 x 7 x 6 x 5

上面的例子中,第二維的1被拉伸到7,第三維的1被拉伸到6,第四維的1被拉伸到5。

還有更多的例子:

B      (1d array):      1
Result (2d array):  5 x 4

A      (2d array):  5 x 4
B      (1d array):      4
Result (2d array):  5 x 4

A      (3d array):  15 x 3 x 5
B      (3d array):  15 x 1 x 5
Result (3d array):  15 x 3 x 5

A      (3d array):  15 x 3 x 5
B      (2d array):       3 x 5
Result (3d array):  15 x 3 x 5

A      (3d array):  15 x 3 x 5
B      (2d array):       3 x 1
Result (3d array):  15 x 3 x 5

下面是不匹配的例子:

A      (1d array):  3
B      (1d array):  4 # trailing dimensions do not match

A      (2d array):      2 x 1
B      (3d array):  8 x 4 x 3 # second from last dimensions mismatched

再舉個實際代碼的例子:

>>> x = np.arange(4)
>>> xx = x.reshape(4,1)
>>> y = np.ones(5)
>>> z = np.ones((3,4))

>>> x.shape
(4,)

>>> y.shape
(5,)

>>> x + y
ValueError: operands could not be broadcast together with shapes (4,) (5,)

>>> xx.shape
(4, 1)

>>> y.shape
(5,)

>>> (xx + y).shape
(4, 5)

>>> xx + y
array([[ 1.,  1.,  1.,  1.,  1.],
       [ 2.,  2.,  2.,  2.,  2.],
       [ 3.,  3.,  3.,  3.,  3.],
       [ 4.,  4.,  4.,  4.,  4.]])

>>> x.shape
(4,)

>>> z.shape
(3, 4)

>>> (x + z).shape
(3, 4)

>>> x + z
array([[ 1.,  2.,  3.,  4.],
       [ 1.,  2.,  3.,  4.],
       [ 1.,  2.,  3.,  4.]])

廣播還提供了一個非常方便的進行兩個1維數組進行外部乘積的運算:

>>> a = np.array([0.0, 10.0, 20.0, 30.0])
>>> b = np.array([1.0, 2.0, 3.0])
>>> a[:, np.newaxis] + b
array([[  1.,   2.,   3.],
       [ 11.,  12.,  13.],
       [ 21.,  22.,  23.],
       [ 31.,  32.,  33.]])

其中a[:, np.newaxis] 將1維的數組轉換成為4維的數組:

In [230]: a[:, np.newaxis]Out[230]:array([[ 0.],   [10.],   [20.],   [30.]])

感謝各位的閱讀,以上就是“如何使用NumPy中的廣播”的內容了,經過本文的學習后,相信大家對如何使用NumPy中的廣播這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關知識點的文章,歡迎關注!

分享名稱:如何使用NumPy中的廣播
路徑分享:http://chinadenli.net/article0/pgjcoo.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)響應式網站App開發(fā)自適應網站建站公司商城網站

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都做網站