繁体   English   中英

numpy矩阵乘法nxm * mxp = nxp

[英]numpy Matrix Multiplication n x m * m x p = n x p

我正在尝试将两个numpy数组相乘作为矩阵。 我期望如果A是一个nxm矩阵,而B是一个mxp矩阵,那么A*B生成一个nxp矩阵。

这段代码创建了一个5x3矩阵和一个3x1矩阵,并通过shape属性进行了验证。 我很小心地在两个维度上创建两个数组。 最后一行执行乘法运算,我期望使用5x1矩阵。

A = np.array([[1,1,1],[2,2,2],[3,3,3],[4,4,4],[5,5,5]])
print(A)
print(A.shape)
B = np.array([[2],[3],[4]])
print(B)
print(B.shape)
print(A*B)

结果

[[1 1 1]
 [2 2 2]
 [3 3 3]
 [4 4 4]
 [5 5 5]]
(5, 3)
[[2]
 [3]
 [4]]
(3, 1)

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-38-653ff6c66fb7> in <module>()
      5 print(B)
      6 print(B.shape)
----> 7 print(A*B)

ValueError: operands could not be broadcast together with shapes (5,3) (3,1) 

甚至异常消息也表明内部尺寸(3和3)匹配。 为什么乘法会引发异常? 我应该如何生成5x1矩阵?

我正在使用Python 3.6.2和Jupyter Notebook服务器5.2.2。

*运算符提供逐元素乘法,这要求数组具有相同的形状或“可广播”

对于点积,请使用A.dot(B)或者在许多情况下,可以使用A @ B (在Python 3.5中;请阅读与dot不同之处)

>>> import numpy as np
>>> A = np.array([[1,1,1],[2,2,2],[3,3,3],[4,4,4],[5,5,5]])
>>> B = np.array([[2],[3],[4]])
>>> A @ B
array([[ 9],
       [18],
       [27],
       [36],
       [45]])

对于更多选项,尤其是用于处理高维数组,还有np.matmul

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM