我無法真正解釋原因,因爲我經常使用np.matrix
而不是np.array
來防止這種情況。感謝上面評論中的@ Jaime的鏈接,很顯然np.matrix
僅僅是np.ndarray
的一個子類,具有重新定義的中綴操作,其中有來自線性代數的適當答案。如果沒有,則從np.ndarray
與ndim = 2
的規則回落。
似乎除了遵循從A
元素搭配的元素從B
矩陣乘法法則:
In [1]: import numpy as np
In [2]: A = np.matrix([1,2,3]).T
In [3]: B = np.matrix([1,1,1])
In [4]: A
Out[4]:
matrix([[1],
[2],
[3]])
In [5]: B
Out[5]: matrix([[1, 1, 1]])
In [6]: A+B
Out[6]:
matrix([[2, 2, 2],
[3, 3, 3],
[4, 4, 4]])
In [7]: A*B
Out[7]:
matrix([[1, 1, 1],
[2, 2, 2],
[3, 3, 3]])
這是你np.array
獲得相同的行爲:
In [9]: a = np.arange(3)[...,None]
In [10]: b = np.arange(3)
In [11]: a
Out[11]:
array([[0],
[1],
[2]])
In [12]: b
Out[12]: array([0, 1, 2])
In [13]: a+b
Out[13]:
array([[0, 1, 2],
[1, 2, 3],
[2, 3, 4]])
這將是有趣的知道。 – Ivan 2013-04-03 19:21:56
谷歌「numpy廣播」 – user1149913 2013-04-03 19:37:25
@ user1149913我相信問題不是廣播是如何工作的,而是爲什麼一行允許使用列向量加/減?此外,請記住,廣播規則對於'np.matrix'與'np.ndarray'大不相同。 – askewchan 2013-04-03 19:39:03