日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

详解Numpy的广播机制

發(fā)布時間:2025/4/5 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 详解Numpy的广播机制 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

廣播

Numpy中有很多強大的功能,廣播便是其中之一。廣播能幫助你對兩個不同維度的數(shù)組執(zhí)行操作。例如:

import numpy as np a = np.array([[0, 1],[2, 3],[4, 5],]) b = np.array([10, 100]) a * b

[[ 0, 100],
[ 20, 300],
[ 40, 500]]


不難發(fā)現(xiàn),數(shù)組a和b的維度并不一致。為了讓他們進行計算,Numpy會將b數(shù)組在第二維度上進行拉伸,這個過程就像把它復制了三次一樣。當這些過程執(zhí)行完畢之后,再對兩個數(shù)組對應位置的元素執(zhí)行運算操作。
廣播中有這樣一條規(guī)則,只有維度為1的方向可以被拉伸(如果一個數(shù)組僅有一維,為了將其進行廣播,其他維度均會被置為1)。上述示例中數(shù)組b就是一個一維數(shù)組,并且b.shape=(2,)。為了將b的維度廣播到二維,使其與數(shù)組a保持一致,Numpy會給b數(shù)組添加一個值為1的維度。b數(shù)組現(xiàn)在每一維的長度為b.shape=(1, 2)。這樣子,新的維度就可以被拉伸三次,從而使b的維度與a的維度保持一致b.shape=(3, 2)。
另外一條規(guī)則是Numpy會對廣播的維度進行比對。為了對兩個數(shù)組進行計算,任何不一致的維度都必須被拉伸到同樣的值。但是,根據(jù)第一條規(guī)則,只有維度為1的方向可以被拉伸。這意味著一些維度是不能被廣播的,若對不為1的維度進行廣播,Numpy將報錯。

c = np.array([[0, 1, 2],[3, 4, 5],]) b = np.array([10, 100]) print('c數(shù)組的形狀為:{}, b數(shù)組的形狀為:{}'.format(c.shape, b.shape)) c * b

c數(shù)組的形狀為:(2, 3), b數(shù)組的形狀為:(2,)

ValueError Traceback (most recent call last)
in
5 b = np.array([10, 100])
6 print(‘c數(shù)組的形狀為:{}, b數(shù)組的形狀為:{}’.format(c.shape, b.shape))
----> 7 c * b

ValueError: operands could not be broadcast together with shapes (2,3) (2,)


為什么會報錯呢?我們發(fā)現(xiàn)其原因是這樣子的:首先,Numpy會給b數(shù)組添加一個維度,使其形狀變?yōu)閎.shape=(1, 2)。此時,b數(shù)組和c數(shù)組的最后一維大小分別為2和3。然后,Numpy會對這兩個值進行對比并發(fā)現(xiàn)其不一致。由于這兩個維度值均不為1(不能對其進行拉伸),此時,Numpy會終止此計算過程并給出報錯。
要想對上例中的數(shù)組c和數(shù)組b做乘積運算,我們有如下解決方案:指定Numpy在b數(shù)組的第二維度上進行廣播。通過使用None來索引第二個維度便可實現(xiàn)此功能。此時,b的形狀會變?yōu)閎.shape=(2, 1)。這樣子b數(shù)組就可以廣播到與c數(shù)組同樣的維度。

c = np.array([[0, 1, 2],[3, 4, 5],]) b = np.array([10, 100]) c * b[:, None]

[[ 0, 10, 20],
[300, 400, 500]]


在tutorial of Numpy broadcasting rules中有對于上述規(guī)則的可視化解釋,并提供了許多很好的例子。
github鏈接
https://github.com/wzy6642/numpy-translate

《新程序員》:云原生和全面數(shù)字化實踐50位技術專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的详解Numpy的广播机制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。