Python 带numpy.dot()的矩阵积
我正在尝试计算产品: tA*M*B 其中A,B是两个向量,M是平方矩阵,tA是转置后的A。结果应该是一个数字 Numpy有将数组和矩阵相乘的Python 带numpy.dot()的矩阵积,python,arrays,numpy,Python,Arrays,Numpy,我正在尝试计算产品: 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.no
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) )
那么:
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) )
您可以使用该函数
这相当于
numpy.dot(numpy.dot(tA,M),B)
从
reduce(function,sequence)
返回一个值,该值通过对序列的前两项调用二进制函数,然后对结果和下一项调用,依此类推
一个简单易懂的例子是
reduce(λ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])
您可以使用该函数
这相当于
numpy.dot(numpy.dot(tA,M),B)
从
reduce(function,sequence)
返回一个值,该值通过对序列的前两项调用二进制函数,然后对结果和下一项调用,依此类推
一个简单易懂的例子是
reduce(λ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])
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)
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)