python - 为什么相同的符号显示数组和矩阵的逐元素乘法,就像矩阵的乘法一样?

标签 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 矩阵严格来说是二维的,而 numpy 数组 (ndarrays) 是 N 维的。 Matrix对象是ndarray的子​​类,因此继承了ndarray的所有属性和方法。 Ndarrays 应用几乎所有的操作元素。

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]]

关于python - 为什么相同的符号显示数组和矩阵的逐元素乘法,就像矩阵的乘法一样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51981916/

相关文章:

python - 如果首先评估第二个条件通常会导致错误,那么使用 'and' 是一种好习惯吗

python - 列中的 pandas 累积减法

python - 通过索引/单热编码生成序列

python - numpy 中的 3d 矩阵乘法

python - 使用序号创建 3D NumPy 数组

numpy - 广播相同形状的多维数组索引

python - 生成识别给定正则表达式的 DFA 图片

python - 如何自动备份 Azure Web Apps 上托管的 Django 应用程序中的 db.sqlite3 文件?

python - 如何在django查询中传递oracle优化提示

python - 在Python中绘制热图