作者:杰少

einsum函数

简介

在平时的工作中,包括时间序列等的建模中,我们常常会涉及到线性或者Multilinear代数的计算,很多时候包括我在内也喜欢偷懒使用numpy来处理,个人觉得还是可以的,但有的朋友觉得这个看起来可读性会差一些,并且速度上也差一些,今天就推荐一个新的函数einsum函数。

通过einsum函数,我们可以写出可读性更好,更加高效的函数。

einsum函数

01

关于einsum函数

einsum函数一般会用于向量,矩阵,张量的计算中。

如果输入的是标量(scalar),我们就可以空着,因为它没有下标。

02

einsum函数优势

1.速度优势

因为numpy很多是用C写的。

  • 如果我们使用Python循环时,所有数据操作都在Python解释器中进行。

  • 当使用内置numpy函数时,它发生在C中,这就是numpy速度更快的原因。

  • 使用einsum时,numpy会在C中处理数据一次并返回最终结果,而使用多个numpy函数会花费更多时间返回多个值。

2.可读性优势

einsum的代码可读性会更强,能大大提高代码的可读性和效率。

代码

  • 比较循环,numpy中的其它函数,einsum

从下面的案例中,我们发现einsum比numpy快乐将近30倍,比循环快了500-600倍。

import numpy as npA = np.random.rand(1000,1000)
B = np.random.rand(1000,1000)
%%time
# Using loops
s = 0
n, m = A.shape
for i in range(n):for j in range(m):s += A[i, j]*B[i, j]
s# CPU times: user 596 ms, sys: 5.79 ms, total: 602 ms
# Wall time: 607 ms
# 249760.77497519302
CPU times: user 596 ms, sys: 5.79 ms, total: 602 ms
Wall time: 607 ms
249760.77497519302
%%time
# Using built-in numpy functions
np.trace(np.dot(A.T, B))# CPU times: user 113 ms, sys: 8.54 ms, total: 121 ms
# Wall time: 38.1 ms
# 249760.7749751993
CPU times: user 113 ms, sys: 8.54 ms, total: 121 ms
Wall time: 38.1 ms
249760.7749751993
%%time
# Using einsum
np.einsum('ij,ij->', A,B)# CPU times: user 1.64 ms, sys: 689 µs, total: 2.33 ms
# Wall time: 1.19 ms
# 249760.7749751993
CPU times: user 1.64 ms, sys: 689 µs, total: 2.33 ms
Wall time: 1.19 ms
249760.7749751993

适用问题

所有涉及到矩阵,向量,张量等计算的问题。

参考文献

  1. Write Better And Faster Python Using Einstein Notation

往期精彩回顾适合初学者入门人工智能的路线及资料下载(图文+视频)机器学习入门系列下载中国大学慕课《机器学习》(黄海广主讲)机器学习及深度学习笔记等资料打印《统计学习方法》的代码复现专辑
AI基础下载机器学习交流qq群955171419,加入微信群请扫码:

【Python】疯狂的加速函数!相关推荐

  1. Python:wordcloud.wordcloud()函数的参数解析及其说明

    Python:wordcloud.wordcloud()函数的参数解析及其说明 目录 wordcloud.wordcloud()函数的参数解析及其说明 wordcloud.wordcloud()函数的 ...

  2. 三维点云学习(4)5-DBSCNA python 复现-2-kd-_tree加速

    三维点云学习(4)5-DBSCNA python 复现-2-kd-tree加速 因为在上一章DBSCAN在构建距离矩阵时,需要构建一个NN的距离矩阵,严重占用资源,古采用kd_tree搜索进行进一步的 ...

  3. Python数据系列(四)- 数组array-NumPy:Python的“运算加速氮气”

    本系列要对Python在数据处理中经常用的列表(list).元组(tuple).字典(dictionary).array(数组)-numpy.DataFrame-pandas .集合(set)等数据形 ...

  4. 在python里调用C函数的三种方式

    一个python项目快速开发完以后,常常针对瓶颈进行优化,其中一种方式就是对于性能至关重要的部分,使用C重写,这已经是一种最佳实践.如果整个项目完全使用C,开发效率就没有保障.python运行环境(C ...

  5. 小甲鱼python003答案_小甲鱼:Python学习笔记003_函数

    >>> # 函数 >>> def myFirstFunction(params1,params2...): print("这是我的第一个函数!" ...

  6. python神秘的魔法函数_Python魔法函数

    1.什么是魔法函数 魔法函数即Python类中以__(双下划线)开头,以__(双下划线)结尾的函数,Python提供的函数,可让咱们随意定义类的特性 示例: class Company(object) ...

  7. python 第六章 函数 pta(1)

    1.Multiple-Choice 1.print(type(lambda:3))的输出结果是____. A.<class 'function'> B.<class 'int'> ...

  8. Python最常用的函数、基础语句有哪些?

    作者 | 朱卫军 来源 | Python大数据分析 Python有很多好用的函数和模块,这里给大家整理下我常用的一些方法及语句. 一.内置函数 内置函数是python自带的函数方法,拿来就可以用,比方 ...

  9. python中的pop()函数和popleft()函数

    python中的pop()函数和popleft()函数 首先对于pop而言,它是用于stack中的: stack = [1, 2, 3, 4] print(stack) stack.append(6) ...

最新文章

  1. 在MM32F3273上运行MicroPython,对于性能进行测试
  2. python队列线程池_实例详解:python高级编程之消息队列(Queue)与进程池(Pool)
  3. python中prettytable模块_Python库: PrettyTable 模块
  4. Python之tkinter:动态演示调用python库的tkinter带你进入GUI世界(计算器简单功能)
  5. python对字符串(内嵌的字典)转为字典
  6. FTP服务器之pure-ftpd常见问题及解决方法
  7. filter solutions安装教程
  8. Android中ImageView的scaleType 属性说明。
  9. 新补丁更新(RU和RUR),新的版本(Release 18和19)
  10. win7 vmware ubuntu16 xshell链接
  11. innodb_file_format设置
  12. 金山手机卫士论坛_三星多款手机黑屏系统崩溃 客服:闰4月BUG,无法保证数据不丢失...
  13. IHS遥感图像融合算法及其相关的算法
  14. Ubuntu 搜狗输入法崩溃
  15. selenium 谷歌驱动 下载网址
  16. 基于Forest实践|如何更优雅的统一处理请求签名
  17. python (win32com) 批量删除 word (docx, doc) 中所有页眉、页脚 (Word.Application, Word.Basic)
  18. 2012_WOW_Designing Steganographic Distortion Using Directional Filters
  19. 牛顿差商多项式的理解与C++实现
  20. Homekit智能家居之智能吸顶灯

热门文章

  1. codefroce385E矩阵快速幂
  2. 6.NFC之非NDEF格式
  3. oracle自动选择索引
  4. 聊聊架构设计做些什么来谈如何成为架构师
  5. B计划 第四周(开学第一周)
  6. LoadRunner中对图表的分析说明
  7. “已删除的应用” 流量高
  8. Spring REST
  9. java网络编程,通过TCP,Socket实现多对一的局域网聊天室
  10. .Net Petshop详解(二):petshop三层结构之DataTier