假设你有n个方矩阵A1,...,An.无论如何要以整齐的方式将这些矩阵相乘吗?据我所知,numpy中的dot只接受两个参数.一种显而易见的方法是定义一个函数来调用自身并获得结果.有没有更好的方法来完成它?
Bi *_*ico 54
这可能是一个相对较新的功能,但我喜欢:
A.dot(B).dot(C)
Run Code Online (Sandbox Code Playgroud)
或者如果你有一个长链你可以做:
reduce(numpy.dot, [A1, A2, ..., An])
Run Code Online (Sandbox Code Playgroud)
更新:
这里有关于reduce的更多信息.这是一个可能有帮助的例子.
>>> A = [np.random.random((5, 5)) for i in xrange(4)]
>>> product1 = A[0].dot(A[1]).dot(A[2]).dot(A[3])
>>> product2 = reduce(numpy.dot, A)
>>> numpy.all(product1 == product2)
True
Run Code Online (Sandbox Code Playgroud)
更新2016:从python 3.5开始,有一个新的matrix_multiply符号@:
R = A @ B @ C
Run Code Online (Sandbox Code Playgroud)
per*_*iae 22
使用更新恢复旧问题:
截至2014年11月13日,现在有一个np.linalg.multi_dot功能可以完全满足您的需求.它还具有优化呼叫顺序的好处,但在您的情况下这不是必需的.
请注意,这可以从numpy版本1.10开始.