首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >NumPy矩阵与数组类的乘法有何不同?

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

Stack Overflow用户
提问于 2010-10-08 20:50:48
回答 5查看 243.9K关注 0票数 135

numpy文档建议使用数组而不是矩阵来处理矩阵。但是,与octave (我最近还在使用它)不同,*不执行矩阵乘法,您需要使用matrixmultipy()函数。我觉得这使得代码很难读。

有没有人同意我的观点,并找到了解决方案?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-08-25 05:36:11

在3.5中,Python最终实现了got a matrix multiplication operator。语法为a @ b

票数 21
EN

Stack Overflow用户

发布于 2010-10-09 00:49:23

避免使用matrix类的主要原因是: a)它本质上是二维的,b)与“普通”numpy数组相比有额外的开销。如果你所做的一切都是线性代数,那么请随意使用矩阵类……不过,就我个人而言,我发现它的麻烦比它的价值更大。

对于数组(Python3.5之前的版本),请使用dot而不是matrixmultiply

例如。

代码语言:javascript
复制
import numpy as np
x = np.arange(9).reshape((3,3))
y = np.arange(3)

print np.dot(x,y)

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

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

对于Python3.5中的数组,请使用x @ y

票数 131
EN

Stack Overflow用户

发布于 2013-10-03 05:01:03

在处理数组和处理矩阵时,点运算符会给出不同的答案。例如,假设如下所示:

代码语言:javascript
复制
>>> a=numpy.array([1, 2, 3])
>>> b=numpy.array([1, 2, 3])

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

代码语言:javascript
复制
>>> am=numpy.mat(a)
>>> bm=numpy.mat(b)

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

代码语言:javascript
复制
>>> print numpy.dot(a.T, b)
14
>>> print am.T*bm
[[1.  2.  3.]
 [2.  4.  6.]
 [3.  6.  9.]]
票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3890621

复制
相关文章

相似问题

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