今天在進行numpy矩陣相加的時候出現了一個小的奇怪的地方,下面我們來看看:
>>>P = np.array([1,2,3,4]) >>>F = np.array([9,8,7,6]).reshape((4,1)) >>>P + F array([[10, 11, 12, 13], [ 9, 10, 11, 12], [ 8, 9, 10, 11], [ 7, 8, 9, 10]])
咦,怎么會這樣,P和F明明都是一維的向量,怎么相加之后成了4×4的矩陣。其實,這和大名鼎鼎的矩陣計算的廣播機制有關。再看下面
>>>P = P.reshape((4,1)) >>>P + F array([[10], [10], [10], [10]])
這個時候就符合我們的預期了。
造成上述兩次加法結果不同的原因在於,第一次相加的時候P的形狀沒有被明確指定,結果相加的時候numpy的廣播機制起了作用。一個矩陣加上一個常數,等於矩陣的每一個值都加上這個常數。這就是最常見的廣播機制了。上述的第一種情況就是使得矩陣F的每一行分別加上P中不同的值,得到每一行的結果1×4的向量,最終結果也就是4×4了。