我有两个 2×2 复矩阵数组,我想知道将它们相乘的最快方法是什么。 (我想对矩阵数组的元素进行矩阵乘法。)目前,我有
numpy.array(map(lambda i: numpy.dot(m1[i], m2[i]), range(l)))
但是还有比这更好的吗?
谢谢,
v923z
最佳答案
numpy.einsum 是这个问题的最佳解决方案,在 DaveP 的引用文献的底部提到了它。代码很干净,很容易理解,而且比循环遍历数组并逐个乘法快一个数量级。下面是一些示例代码:
import numpy
l = 100
m1 = rand(l,2,2)
m2 = rand(l,2,2)
m3 = numpy.array(map(lambda i: numpy.dot(m1[i], m2[i]), range(l)))
m3e = numpy.einsum('lij,ljk->lik', m1, m2)
%timeit numpy.array(map(lambda i: numpy.dot(m1[i], m2[i]), range(l)))
%timeit numpy.einsum('lij,ljk->lik', m1, m2)
print np.all(m3==m3e)
以下是在 ipython notebook 中运行时的返回值:
1000 个循环,最好的 3 个:每个循环 479 µs
10000 个循环,最好的 3 个:每个循环 48.9 µs
真的
关于arrays - 在 Python 中乘以矩阵数组的最快方法(numpy),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7339426/