我无法真正解释其中的原因,因为我经常使用np.matrix
而不是np.array
来防止这种事情。感谢@Jaime 在上面评论中的链接,很明显这np.matrix
只是一个np.ndarray
重新定义的中缀操作的子类,其中线性代数有适当的答案。在没有的地方,它依赖于np.ndarray
with的规则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]])