繁体   English   中英

具有numpy.dot()的矩阵乘积

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM