numpy 矩阵向量乘法[重复]
- 2025-02-20 09:23:00
- admin 原创
- 26
问题描述:
当我将两个numpy
大小为 (nxn)*(nx 1) 的数组相乘时,我得到一个大小为 (nxn) 的矩阵。按照正常的矩阵乘法规则,预期会得到一个 (nx 1) 向量,但我根本找不到有关如何在 Python 的 Numpy 模块中完成此操作的任何信息。
问题是我不想手动实现它以保持程序的速度。
示例代码如下所示:
a = np.array([[5, 1, 3], [1, 1, 1], [1, 2, 1]])
b = np.array([1, 2, 3])
print a*b
>>
[[5 2 9]
[1 2 3]
[1 4 3]]
我想要的是:
print a*b
>>
[16 6 8]
解决方案 1:
最简单的解决方案
使用numpy.dot
或。请参阅此处 的a.dot(b)
文档。
>>> a = np.array([[ 5, 1 ,3],
[ 1, 1 ,1],
[ 1, 2 ,1]])
>>> b = np.array([1, 2, 3])
>>> print a.dot(b)
array([16, 6, 8])
发生这种情况的原因是 numpy 数组不是矩阵,并且标准操作*, +, -, /
在数组上逐元素进行。
请注意,虽然您可以使用numpy.matrix
(截至 2021 年初)其中*
将被视为标准矩阵乘法,numpy.matrix
但已被弃用,并且可能会在未来的版本中删除。。请参阅其文档中的注释(如下所示):
不再建议使用此类,即使对于线性代数也是如此。请改用常规数组。将来可能会删除该类。
谢谢@HopeKing。
其他解决方案
还知道还有其他选择:
如下所示,如果使用 python3.5+ 和 numpy v1.10+,则该
@
运算符将按预期工作:
>>> print(a @ b)
array([16, 6, 8])
如果您想要过度使用,可以使用
numpy.einsum
。文档将让您了解它的工作原理,但老实说,直到阅读这个答案并自己尝试了一下,我才完全理解如何使用它。
>>> np.einsum('ji,i->j', a, b)
array([16, 6, 8])
截至 2016 年中(numpy 1.10.1),您可以尝试实验性的
numpy.matmul
,其工作原理numpy.dot
与两个主要例外相似:没有标量乘法,但它可以与矩阵堆栈一起使用。
>>> np.matmul(a, b)
array([16, 6, 8])
numpy.inner
`numpy.dot` 函数方式与矩阵向量乘法相同,但对于矩阵-矩阵和张量乘法的行为不同(有关内积和点积之间的差异,请参阅维基百科,或参阅有关 numpy 实现的SO 答案)。
>>> np.inner(a, b)
array([16, 6, 8])
# Beware using for matrix-matrix multiplication though!
>>> b = a.T
>>> np.dot(a, b)
array([[35, 9, 10],
[ 9, 3, 4],
[10, 4, 6]])
>>> np.inner(a, b)
array([[29, 12, 19],
[ 7, 4, 5],
[ 8, 5, 6]])
如果您有多个2D 数组需要
dot
组合,您可以考虑使用该np.linalg.multi_dot
函数,它简化了多个嵌套数组的语法np.dot
。请注意,这仅适用于 2D 数组(即不适用于矩阵向量乘法)。
>>> np.dot(np.dot(a, a.T), a).dot(a.T)
array([[1406, 382, 446],
[ 382, 106, 126],
[ 446, 126, 152]])
>>> np.linalg.multi_dot((a, a.T, a, a.T))
array([[1406, 382, 446],
[ 382, 106, 126],
[ 446, 126, 152]])
针对特殊情况的罕见选择
如果您有张量(维数大于或等于一的数组),则可以使用
numpy.tensordot
可选参数axes=1
:
>>> np.tensordot(a, b, axes=1)
array([16, 6, 8])
numpy.vdot
如果您有一个复数矩阵,请不要使用n*m
,因为矩阵将被展平为一维数组,然后它将尝试找到展平矩阵和向量之间的复共轭点积(由于与的大小不匹配,这将失败n
)。
- 2025年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 项目管理必备:盘点2024年13款好用的项目管理软件
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)