Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 带numpy.dot()的矩阵积_Python_Arrays_Numpy - Fatal编程技术网

Python 带numpy.dot()的矩阵积

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

我正在尝试计算产品:

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) )
那么:

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)