python代码大全及使用技巧-1个小技巧,让你的Python代码运行效率提升17倍

Mandelbrot集是一个涉及位运算、递归和虚数的有趣的数学现象。由于它是一个复杂且计算多样化的函数,对于如何提高代码运行效率,是一个非常好的研究案例。

14982672_202007091024541Sk5n.jpg

通过对函数mandelbrot_set函数进行运行计时,我们发现这个函数平均需要8秒钟才能运行完成。

import numpy as np

def mandelbrot_set(width, height, zoom=1, x_off=0, y_off=0, niter=256):

w,h = width, height

pixels = np.arange(w*h, dtype=np.uint16).reshape(h, w)

for x in range(w):

for y in range(h):

zx = 1.5*(x + x_off - 3*w/4)/(0.5*zoom*w)

zy = 1.0*(y + y_off - h/2)/(0.5*zoom*h)

z = complex(zx, zy)

c = complex(0, 0)

for i in range(niter):

if abs(c) > 4: break

c = c**2 + z

color = (i << 21) + (i << 10) + i * 8

pixels[y,x] = color

在代码中加载Cython,效率提升25%

在这里,我们做一个简单的更改:我们在一个单独的单元中加载Cython,这是一个专用于在 C 和 Python 之间架起桥梁的转换模块。然后,在该单元格的顶部,键入 %% cython -a,触发 Jupyter Notebook 的换行符,通过 Cython 运行代码,Cython 会在后台自动将Python代码转换为C。我们的函数 mandelbrot_set 可以在 Python 中调用,但将使用C结构运行。

再次运行我们更新的代码,我们看到减少了近两秒。几乎什么都不做就能提高25%的运行效率!

在函数中声明变量类型,运行效率提升17倍

不过,我们还有更好的办法。当 Cython 尝试将 Python 进程转换为 C 结构时,它的运行速度就会受到限制。我们可以协助 Cython 加快运行的事情之一就是声明在函数中使用的所有变量的变量类型,这样可以更好地优化我们的代码。

注意每个参数的数据类型是如何指定的(在这种情况下,所有数据类型都为 int )。如果一个变量是独立创建的,则可以使用 cdef 关键字,然后使用数据类型和采用该类型的变量。从直接声明的变量到范围(n)中的 i in 的所有内容,都可以为 Cython 提供尽可能多的帮助。

重新运行使用了指定数据类型来进行更新后的函数,我们发现运行时间减少了很多,比原来的时间快 了17倍!

在 10 秒钟内,仅修改了一个数据类型,我们的代码效率就提高了 17 倍。虽然减少的时间只有几秒,但这种方法如果应用于更长的代码脚本中,节省的计算量那将是几个小时。

工作原理

Cython是一个可以将 Python 编写成更快、更高效的C语言的模块。虽然Python的自由性和开放性促使了广泛采用和开发,特别是在数据科学和其他重计算领域,但这种自由是以效率低下为代价的。在C语言中,编码者有义务提供有关代码执行的更多信息,这是一项可以加快处理速度的繁重工作。通过把我们的Python代码写成高效的 C 结构和方法,你可以让它变得更高效,而且你甚至不需要知道C是什么!

cdef 关键字将变量声明为静态类型的 C 变量。使用这些C变量可以更快地执行代码,因为变量本身具有指定的类型,而不是 Python 中具有类型的值。例如,在 Python 中,可以在一行中将相同的变量设置为整数,而在另一行中将其设置为字符串。例如,a =" hello world”&a =1。但是,在 C 语言中,仅设置静态类型的变量具有一种数据类型。

这种刚性意味着可以避免 Python 动态类型所需的巨大内存空间开销。因为一个变量可以具有许多可能的值,所以需要分配更多的内存。另一方面,对静态类型变量范围的严格限制意味着内存空间和执行过程效率更高。如上所述,函数参数也可以声明为静态类型的C变量。

这就是为什么简单地声明变量类型会让程序处理代码的时间大大缩短。尽管还有许多其他方法可以使 Cython 更加高效地使用 Python 代码,但最简单,技术最少,回报最高的方法是写出变量类型。

在你的脚本中有无数的Cython应用程序。

· 下次如果你需要编写逐行函数以应用于具有数千行的数据帧,进行复杂的数据处理时,记得使用 Cython 来缩短遍历所有行的时间。

· 如果你正在手写数据转换管道以应用复杂和/或条件增强,也要记得考虑能否在 Cython 中实现。

· 在为神经网络编写自定义优化器或损失函数(或自我实现现有函数)时,使用 Cython 可以加快训练过程。

本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是100个Python技巧: 1. 使用for循环可以遍历列表、字符串等可迭代对象。 2. 使用range()函数生成指定范围的数字序列。 3. 使用enumerate()函数可以同时获得元素索引和值。 4. 使用zip()函数可以同时遍历多个可迭代对象。 5. 使用列表推导式可以快速生成列表。 6. 使用集合可以进行高效的集合操作。 7. 使用字典可以进行键值对的映射。 8. 使用切片可以快速获取列表、字符串的子序列。 9. 使用函数可以封装可复用的代码块。 10. 使用类可以实现面向对象的编程。 11. 使用模块可以组织和管理代码。 12. 使用异常处理可以捕获和处理程序的错误。 13. 使用with语句可以自动管理资源的释放。 14. 使用装饰器可以增强函数的功能。 15. 使用生成器可以按需计算大量数据。 16. 使用协程可以实现异步编程。 17. 使用多线程可以并发执行任务。 18. 使用多进程可以充分利用多核处理器。 19. 使用文件操作可以读写文件。 20. 使用正则表达式可以进行复杂的文本匹配。 21. 使用time模块可以获取当前时间和进行时间操作。 22. 使用random模块可以生成随机数。 23. 使用math模块可以进行数学运算。 24. 使用json模块可以进行JSON数据的处理。 25. 使用pickle模块可以进行对象的序列化和反序列化。 26. 使用os模块可以进行文件和目录的操作。 27. 使用sys模块可以获取和修改Python解释器的运行时环境。 28. 使用re模块可以进行正则表达式匹配。 29. 使用argparse模块可以解析命令行参数。 30. 使用logging模块可以进行日志记录。 31. 使用unittest模块可以编写和执行单元测试。 32. 使用requests库可以发送HTTP请求。 33. 使用BeautifulSoup库可以解析HTML文档。 34. 使用numpy库可以进行数组和矩阵计算。 35. 使用pandas库可以进行数据处理和分析。 36. 使用matplotlib库可以进行数据可视化。 37. 使用scikit-learn库可以进行机器学习。 38. 使用tensorflow库可以进行深度学习。 39. 使用flask库可以构建Web应用。 40. 使用Django库可以构建全功能的Web应用。 41. 使用SQLite数据库可以进行轻量级的数据存储。 42. 使用MySQL数据库可以进行关系型数据存储。 43. 使用MongoDB数据库可以进行文档型数据存储。 44. 使用Redis数据库可以进行缓存和键值存储。 45. 使用Elasticsearch可以进行搜索和分析。 46. 使用OpenCV库可以进行图像处理和计算机视觉。 47. 使用pygame库可以进行游戏开发。 48. 使用tkinter库可以进行桌面应用程序开发。 49. 使用wxPython库可以进行跨平台的GUI开发。 50. 使用Flask-RESTful可以构建RESTful API。 51. 使用Celery可以进行异步任务的调度和执行。 52. 使用pytest可以进行更简洁和灵活的单元测试。 53. 使用Selenium可以进行Web自动化测试。 54. 使用Faker可以生成随机的测试数据。 55. 使用IPython可以进行交互式的开发和调试。 56. 使用Jupyter Notebook可以进行数据分析和可视化。 57. 使用Spyder可以进行科学计算和Python开发。 58. 使用cookiecutter可以快速构建项目模板。 59. 使用virtualenv可以创建和管理Python虚拟环境。 60. 使用pip可以安装和管理Python包。 61. 使用pyenv可以管理多个Python版本。 62. 使用conda可以创建和管理Python环境。 63. 使用autopep8可以自动格式化Python代码。 64. 使用black可以自动格式化Python代码。 65. 使用flake8可以检查Python代码是否符合PEP8规范。 66. 使用bandit可以检查Python代码中的安全漏洞。 67. 使用isort可以自动排序Python导入语句。 68. 使用mypy可以进行静态类型检查。 69. 使用pylint可以进行代码质量检查。 70. 使用pyinstaller可以将Python程序打包成可执行文件。 71. 使用cx_Freeze可以将Python程序打包成可执行文件。 72. 使用py2exe可以将Python程序打包成可执行文件。 73. 使用pyodbc可以连接和操作数据库。 74. 使用paramiko可以进行SSH远程操作。 75. 使用fabric可以进行任务的自动化部署。 76. 使用pytest-django可以简化Django的单元测试。 77. 使用django-rest-framework可以快速构建RESTful API。 78. 使用scrapy可以进行Web爬虫。 79. 使用sqlalchemy可以进行高级数据库操作。 80. 使用pymongo可以连接和操作MongoDB数据库。 81. 使用tqdm可以在循环中显示进度条。 82. 使用click可以构建命令行接口。 83. 使用cProfile可以进行性能分析。 84. 使用line_profiler可以逐行分析代码性能。 85. 使用memory_profiler可以分析内存使用情况。 86. 使用profilehooks可以进行分析函数调用性能。 87. 使用PyInstaller可以将Python程序打包成可执行文件。 88. 使用Openpyxl可以读写Excel文件。 89. 使用Pillow可以进行图像处理。 90. 使用pyautogui可以进行图像识别和自动化操作。 91. 使用pytesseract可以进行文字识别。 92. 使用pywin32可以操作Windows系统API。 93. 使用pyserial可以进行串口通信。 94. 使用opencv-python可以进行图像处理。 95. 使用catboost可以进行梯度提升决策树算法。 96. 使用fasttext可以进行文本分类和词向量训练。 97. 使用gensim可以进行文本相似度计算。 98. 使用jieba可以进行中文分词。 99. 使用lightgbm可以进行梯度提升算法。 100. 使用xgboost可以进行梯度提升算法。 这些小技巧涵盖了Python的各个方面,包括语法、标准库、第三方库和常见开发任务。通过学习和应用这些技巧,可以提高Python编程的效率和质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值