Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么相同的符号表示数组的元素相乘和矩阵的矩阵相乘?_Python_Numpy - Fatal编程技术网

Python 为什么相同的符号表示数组的元素相乘和矩阵的矩阵相乘?

Python 为什么相同的符号表示数组的元素相乘和矩阵的矩阵相乘?,python,numpy,Python,Numpy,在下面的代码中,为什么相同的符号*对矩阵和数组显示不同的行为?为什么在矩阵的情况下不显示元素相乘 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) Numpy矩阵是

在下面的代码中,为什么相同的符号*对矩阵和数组显示不同的行为?为什么在矩阵的情况下不显示元素相乘

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)

Numpy矩阵是严格二维的,而Numpy数组(ndarray)是N维的。矩阵对象是ndarray的一个子类,因此它们继承ndarray的所有属性和方法。nArray几乎适用于所有操作元素

numpy矩阵的主要优点是它们为矩阵乘法提供了一种方便的表示法:如果a和b是矩阵,那么a*b是它们的矩阵乘积(不是元素)。用
np.matrix
进行的元素运算是用
np.multiply(a,b)
获得的

从Python 3.5开始,NumPy支持使用@运算符进行中缀矩阵乘法。因此,
np.matrix
*
乘积相当于
np.array
@
乘积。在代码中:

a= np.arange(2*2).reshape(2,2)
#> a = [[0 1]
#       [2 3]]
b= np.array([[0,0],[1,1]])
#> b = [[0 0]
#       [1 1]]
a@b
#>[[1 1]
#  [3 3]]
a*b
#>[[0 0]
#  [2 3]]


d=np.matrix([[0,1],[2,3]])
e= np.matrix([[0,0],[1,1]])
d*e                 # Equivalent to a@b
#> [[1 1]
#   [3 3]]
np.multiply(d,e)    # Equivalent to a*b
#> [[0 0]
#   [2 3]]

np.matrix
是为MATLAB用户设计的。有
*
是矩阵乘法,
*
是元素乘法
numpy
无法向python添加运算符,但它可以重载现有运算符。