更新時間:2021年06月11日16時26分 來源:傳智教育 瀏覽次數:
arr = np.array([[1, 2, 3, 2, 1, 4], [5, 6, 1, 2, 3, 1]])
arr + 1
arr / 2
# 可以對比python列表的運算,看出區(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]])
上面這個能進行運算嗎,結果是不行的!
數組在進行矢量化運算時,要求數組的形狀是相等的。當形狀不相等的數組執(zhí)行算術運算的時候,就會出現廣播機制,該機制會對數組進行擴展,使數組的shape屬性值一樣,這樣,就可以進行矢量化運算了。下面通過一個例子進行說明:
arr1 = np.array([[0],[1],[2],[3]])
arr1.shape
# (4, 1)
arr2 = np.array([1,2,3])
arr2.shape
# (3,)
arr1+arr2
# 結果是:
array([[1, 2, 3],
[2, 3, 4],
[3, 4, 5],
[4, 5, 6]])
上述代碼中,數組arr1是4行1列,arr2是1行3列。這兩個數組要進行相加,按照廣播機制會對數組arr1和arr2都進行擴展,使得數組arr1和arr2都變成4行3列。
下面通過一張圖來描述廣播機制擴展數組的過程:
廣播機制實現了時兩個或兩個以上數組的運算,即使這些數組的shape不是完全相同的,只需要滿足如下任意一個條件即可。
廣播機制需要擴展維度小的數組,使得它與維度最大的數組的shape值相同,以便使用元素級函數或者運算符進行運算。
如果是下面這樣,則不匹配:
A (1d array): 10
B (1d array): 12
A (2d array): 2 x 1
B (3d array): 8 x 4 x 3
思考:下面兩個ndarray是否能夠進行運算?
arr1 = np.array([[1, 2, 3, 2, 1, 4], [5, 6, 1, 2, 3, 1]])
arr2 = np.array([[1], [3]])
猜你喜歡: