首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >数字矩阵乘法n x m*m x p=n x p

数字矩阵乘法n x m*m x p=n x p
EN

Stack Overflow用户
提问于 2018-02-06 08:47:39
回答 1查看 4.6K关注 0票数 1

我正在尝试将两个numpy数组相乘作为矩阵。我期望如果An x m矩阵,Bm x p矩阵,那么A*B将生成n x p矩阵。

此代码创建一个5x3矩阵和一个3x1矩阵,正如shape属性所验证的那样。我小心翼翼地在二维中创建这两个数组。最后一行执行乘法,我期望得到一个5x1矩阵。

代码语言:javascript
运行
复制
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)

结果

代码语言:javascript
运行
复制
[[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。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-06 09:04:30

*运算符提供元素乘法,这要求数组具有相同的形状,或者是'broadcastable'

对于点产品,可以使用A.dot(B),或者在很多情况下可以使用A @ B (在Python3.5中;read how it differs from dot

代码语言:javascript
运行
复制
>>> 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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48633812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档