加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

在Python中加倍矩阵数组的最快方法(numpy)

发布时间:2020-12-20 13:24:44 所属栏目:Python 来源:网络整理
导读:我有两个2乘2复数矩阵的数组,我想知道最快的乘法方法是什么. (我想对矩阵数组的元素进行矩阵乘法.)目前,我有 numpy.array(map(lambda i: numpy.dot(m1[i],m2[i]),range(l))) 但是,一个人能比这更好吗? 谢谢, v923z 解决方法 numpy.einsum是这个问题的最佳解
我有两个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)

m3 = numpy.array(map(lambda i: numpy.dot(m1[i],range(l)))
m3e = numpy.einsum('lij,ljk->lik',m1,m2)

%timeit numpy.array(map(lambda i: numpy.dot(m1[i],range(l)))
%timeit numpy.einsum('lij,m2)

print np.all(m3==m3e)

以下是在ipython笔记本中运行时的返回值:1000个循环,最佳3:每循环479μs10000循环,最佳3:每循环48.9μs真正

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读