python - 当输入是许多相同的数组时使 np.einsum 更快?(或任何其他更快的方法)
问题描述
我有一段代码类型:
nnt = np.real(np.einsum('xa,xb,yc,yd,abcde->exy',evec,evec,evec,evec,quartic))
其中evec
是(比如说)一个 L x Lnp.float32
数组,并且quartic
是一个 L x L x L x L x Tnp.complex64
数组。
我发现这个程序相当慢。
我认为既然所有的evec
' 都是相同的,那么可能有更快的方法来做到这一点?
提前致谢。
解决方案
首先,您可以重用第一个计算:
evec2 = np.real(np.einsum('xa,xb->xab',evec,evec))
nnt = np.real(np.einsum('xab,ycd,abcde->exy',evec2,evec2,quartic))
如果你不关心内存,只需要性能:
evec2 = np.real(np.einsum('xa,xb->xab',evec,evec))
nnt = np.real(np.einsum('xab,ycd,abcde->exy',evec2,evec2,quartic,optimize=True))
推荐阅读
- javascript - 反应原生的后备字体
- perl - Perl get 请求只返回半页
- python - 将文件从内存上传到 S3
- reactjs - 直接修改 React 组件的状态是否可靠且一致?
- jenkins - 如何调试 Jenkins 的 `emailext` 插件?
- javascript - 如何通过 mysql datetime 输入 datetime-local
- python-3.x - 当有同名的包时,如何在 Python 3 中加载模块?
- python - 使用 Python 从 Blender 2.8 导出每个面部纹理索引
- string - xQuery:检查元素中的字符串,但忽略同一元素中但具有不同值的多个元素
- python - 如何增加 PySpark 数据帧的分区?