[英]matrix product with numpy.dot()
我正在尝试计算乘积:
TA * M * B
其中A,B是两个向量,M是平方矩阵,tA是转置的A。结果应为数字。
Numpy具有将数组和矩阵相乘的dot()
函数:有没有一种方法可以一次使用它来计算我的乘积?
我正在使用python 2.6
怎么样:
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) )
您可以使用减少功能
reduce(numpy.dot,[tA,M,B])
这相当于
numpy.dot(numpy.dot(tA,M),B)
从教程
reduce(function, sequence)
返回一个值,该值是通过在序列的前两个项,然后在结果和下一个项等上调用二进制函数来构造的。
文档中一个易于理解的示例是
reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])
计算((((1+2)+3)+4)+5)
在您的情况下是否值得使用reduce
值得商bat。 但是,如果您有很长的矩阵乘法字符串,它将澄清代码。 比较下面的等价代码行,这些代码行将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])
np.einsum
更好地控制dot
操作。 但是,关于何时比np.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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.