矩阵产品与numpy.dot()

时间:2014-03-21 17:46:31

标签: python arrays numpy

我正在尝试计算产品:

TA * M * B

其中A,B是两个向量,M是平方矩阵,tA是转置的A.结果应该是数字。

Numpy有dot()函数可以将数组和矩阵相乘:有没有办法可以用它来一次性计算我的产品?

我正在使用python 2.6

3 个答案:

答案 0 :(得分:2)

怎么样:

import numpy

#Generate Random Data
M = numpy.random.normal(0,1,9).reshape(3,3)
A = numpy.random.normal(0,1,3)
B = numpy.random.normal(0,1,3)

#The Operation
numpy.dot(A, numpy.dot(M,B) )

答案 1 :(得分:2)

您可以使用reduce功能

reduce(numpy.dot,[tA,M,B])

这相当于

numpy.dot(numpy.dot(tA,M),B)

来自tutorial

  

reduce(function, sequence)返回通过在序列的前两项上调用二元函数函数构造的单个值,然后在结果和下一项上调用,依此类推。

documentation中一个易于理解的例子是

  

reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])计算((((1+2)+3)+4)+5)

在你的案例中是否值得使用reduce是值得商榷的。但是,如果您有一长串矩阵乘法,它会澄清代码。比较以下将tA,M1,M2,M3和B相乘的等效代码行。

print numpy.dot(numpy.dot(numpy.dot(numpy.dot(tA,M1),M2),M3),B)
print reduce(numpy.dot,[tA,M1, M2, M3,B])

答案 2 :(得分:1)

np.einsum可以更好地控制dot次操作。然而,有一些争论,关于它何时比np.dot更快或更慢,以及它是否消耗太多内存(当基质非常大时

A=np.arange(1,4)
B=10*np.arange(3,6)
M=np.arange(9).reshape(3,3)
np.dot(A,np.dot(M,B))
np.einsum('i,ij,j',A,M,B)