在下面的代码中,为什么相同的符号*对矩阵和数组表现出不同的行为?为什么在矩阵情况下为什么不显示逐元素乘法?
a= np.arange(2*3).reshape(2,3)
print(a)
b= np.array([[0,0,0],[1,1,1]])
print(b)
c= a*b
print(c)
d=np.matrix([[1,2],[3,4]])
e= np.matrix([[0,0],[1,1]])
f= d*e
print("d: ",d,"e: ",e)
print(f)
答案 0 :(得分:3)
numpy矩阵严格是二维的,而numpy数组(ndarray)是N维的。矩阵对象是ndarray的子类,因此它们继承了ndarray的所有属性和方法。 Ndarray几乎所有操作都巧妙地应用。
numpy矩阵的主要优点是它们为矩阵乘法提供了一种方便的表示法:如果a和b是矩阵,则a * b是它们的矩阵乘积(不是元素)。通过np.matrix
获得np.multiply(a,b)
的元素操作。
从Python 3.5开始,NumPy支持使用@运算符进行中缀矩阵乘法。因此,np.matrix
的{{1}}产品等于*
的{{1}}产品。在您的代码中:
np.array