arrays - 在 Python 中乘以矩阵数组的最快方法(numpy)

标签 arrays performance matrix numpy multiplication

我有两个 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/

相关文章:

c - 您如何正确使用 fstat() 函数及其限制是什么?

python - 按一列然后另一列(作为子集)对 numpy 进行排序,同时保留行顺序

performance - SQLite:最佳PAGE_SIZE

performance - MarkLogic 服务器可以处理多少个并发连接?

java - 模式优化

c++ - 从opencv矩阵框架将数据从矩阵转换为数组

c++ - 如何传递数组并返回二维矩阵的数组值?

java - 无法理解如何模拟 String.substring 方法

c - 区分嵌套在 union 中且具有 C 中共同属性的两个不同结构

c - 我将如何释放这些 mallocs?