python - 使用 Cython 对 Python 进行性能优化
问题描述
我在学习 Python 时遇到了一种叫做 Cython 的东西,它有助于提高性能。后来,我发现了 Instagram 开发者的演讲https://www.youtube.com/watch?v=_1MSX7V28Po,他在演讲中说 Cython 在 Python 优化方面确实很有帮助。但简要提到,如果你只是添加 Cython 很好,但如果你为你的 python 代码添加类型注释。您可以获得更好的性能。所以,问题是,通过添加 cython 我们可以提高性能,但是如果我们为 python 代码添加 TYPE ANNOTATIONS,那么性能提升会更好吗?
解决方案
看看文档,我想我们可以回答你的问题。
但是,对于性能关键代码,添加静态类型声明通常很有帮助,因为它们将允许 Cython 跳出 Python 代码的动态特性并生成更简单、更快的 C 代码 - 有时速度快几个数量级。
没有类型注释的示例:
def f(x):
return x ** 2 - x
def integrate_f(a, b, N):
s = 0
dx = (b - a) / N
for i in range(N):
s += f(a + i * dx)
return s * dx
简单地在 Cython 中编译它只会提供 35% 的加速。这总比没有好,但是添加一些静态类型可以产生更大的差异。
带有类型注释的示例:
def f(double x):
return x ** 2 - x
def integrate_f(double a, double b, int N):
cdef int i
cdef double s, dx
s = 0
dx = (b - a) / N
for i in range(N):
s += f(a + i * dx)
return s * dx
由于迭代器变量 i 是使用 C 语义键入的,因此 for 循环将被编译为纯 C 代码。键入 a、s 和 dx 很重要,因为它们涉及 for 循环中的算术;键入 b 和 N 差别不大,但在这种情况下,保持一致并键入整个函数并不需要太多额外的工作。
这导致比纯 Python 版本快 4 倍。
因此,似乎仅使用 Cython 确实提供了性能提升,并且添加类型注释提供了更多的性能提升。
推荐阅读
- javascript - POST 请求正在使用 POSTMAN,但是当我尝试使用 Axios 从浏览器(UI)调用相同的链接时,它显示 404 错误 | 节点.js
- python - 如何获得CNN模型的混淆矩阵
- reactjs - 使用带有 Next.js 的 React.js 刷新页面后出现 404 错误
- python - 如何使用 Selenium Webdriver for Python 扩展列表
- docker - 如何使用 pip 在 docker 容器上安装 google cloud sdk(gcloud cli)?
- python - Miniconda 路径更改不会反映在 tmux 中
- javascript - 在 React 组件中的 div 中的第一个单词后强制换行
- intellij-idea - 嗨,我是 dart 的初学者,我找不到 main.dart
- java - Java 8 可选的 .map().orElse 总是返回 orElse
- python - “ValueError:形状 (None, 1) 和 (None, 6) 不兼容”