更新時(shí)間:2021-06-11 來源:黑馬程序員 瀏覽量:
arr = np.array([[1, 2, 3, 2, 1, 4], [5, 6, 1, 2, 3, 1]]) arr + 1arr / 2# 可以對(duì)比python列表的運(yùn)算,看出區(qū)別a = [1, 2, 3, 4, 5] a * 3
arr1 = np.array([[1, 2, 3, 2, 1, 4], [5, 6, 1, 2, 3, 1]]) arr2 = np.array([[1, 2, 3, 4], [3, 4, 5, 6]])
上面這個(gè)能進(jìn)行運(yùn)算嗎,結(jié)果是不行的!
數(shù)組在進(jìn)行矢量化運(yùn)算時(shí),要求數(shù)組的形狀是相等的。當(dāng)形狀不相等的數(shù)組執(zhí)行算術(shù)運(yùn)算的時(shí)候,就會(huì)出現(xiàn)廣播機(jī)制,該機(jī)制會(huì)對(duì)數(shù)組進(jìn)行擴(kuò)展,使數(shù)組的shape屬性值一樣,這樣,就可以進(jìn)行矢量化運(yùn)算了。下面通過一個(gè)例子進(jìn)行說明:
arr1 = np.array([[0],[1],[2],[3]]) arr1.shape# (4, 1)arr2 = np.array([1,2,3]) arr2.shape# (3,)arr1+arr2# 結(jié)果是:array([[1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6]])
上述代碼中,數(shù)組arr1是4行1列,arr2是1行3列。這兩個(gè)數(shù)組要進(jìn)行相加,按照廣播機(jī)制會(huì)對(duì)數(shù)組arr1和arr2都進(jìn)行擴(kuò)展,使得數(shù)組arr1和arr2都變成4行3列。
下面通過一張圖來描述廣播機(jī)制擴(kuò)展數(shù)組的過程:
廣播機(jī)制實(shí)現(xiàn)了時(shí)兩個(gè)或兩個(gè)以上數(shù)組的運(yùn)算,即使這些數(shù)組的shape不是完全相同的,只需要滿足如下任意一個(gè)條件即可。
廣播機(jī)制需要擴(kuò)展維度小的數(shù)組,使得它與維度最大的數(shù)組的shape值相同,以便使用元素級(jí)函數(shù)或者運(yùn)算符進(jìn)行運(yùn)算。
如果是下面這樣,則不匹配:
A (1d array): 10 B (1d array): 12 A (2d array): 2 x 1 B (3d array): 8 x 4 x 3
思考:下面兩個(gè)ndarray是否能夠進(jìn)行運(yùn)算?
arr1 = np.array([[1, 2, 3, 2, 1, 4], [5, 6, 1, 2, 3, 1]]) arr2 = np.array([[1], [3]])
猜你喜歡:
NumPy常用的數(shù)據(jù)類型有哪些?怎樣進(jìn)行轉(zhuǎn)換?
Python是怎樣創(chuàng)建NumPy數(shù)組的?