为了账号安全,请及时绑定邮箱和手机立即绑定

NumPy矩阵与数组类的乘法有何不同?

NumPy矩阵与数组类的乘法有何不同?

MYYA 2019-11-05 16:37:23
numpy文档建议使用数组而不是矩阵来处理矩阵。但是,与八度(直到最近我一直使用)不同,*不执行矩阵乘法,您需要使用函数matrixmultipy()。我觉得这使代码非常不可读。是否有人分享我的观点并找到了解决方案?
查看完整描述

3 回答

?
Helenr

TA贡献1780条经验 获得超4个赞

避免使用matrix该类的主要原因是:a)本质上是二维的,并且b)与“常规” numpy数组相比,存在额外的开销。如果您要做的只是线性代数,那么请务必使用矩阵类...就我个人而言,我发现它比它值得的麻烦更多。


对于数组(Python 3.5之前的版本),请使用dot代替matrixmultiply。


例如


import numpy as np

x = np.arange(9).reshape((3,3))

y = np.arange(3)


print np.dot(x,y)

或在新版本的numpy中,只需使用 x.dot(y)


就个人而言,我发现它比*表示矩阵乘法的运算符更具可读性。


对于Python 3.5中的数组,请使用x @ y。


查看完整回答
反对 回复 2019-11-05
?
杨魅力

TA贡献1811条经验 获得超6个赞

在某些情况下,点运算符在处理数组和处理矩阵时会给出不同的答案。例如,假设以下内容:


>>> a=numpy.array([1, 2, 3])

>>> b=numpy.array([1, 2, 3])

让我们将它们转换成矩阵:


>>> am=numpy.mat(a)

>>> bm=numpy.mat(b)

现在,我们可以看到两种情况的不同输出:


>>> print numpy.dot(a.T, b)

14

>>> print am.T*bm

[[1.  2.  3.]

 [2.  4.  6.]

 [3.  6.  9.]]


查看完整回答
反对 回复 2019-11-05
  • 3 回答
  • 0 关注
  • 572 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信