PyPy执行Pandas相关性计算慢于Python的原因探究
问题
尝试用PyPy执行Pandas的相关性计算,原本以为PyPy会比Python更快,但实际测试中Python耗时7分钟,PyPy反而耗时8.5分钟。测试代码如下:
import pandas as pd import time t = time.time() df = pd.read_csv('./dfn.csv', index_col=0) df.T.corr() print(time.time()-t)
请问这一现象的原因是什么?
原因分析
- Pandas的核心计算逻辑(比如相关性计算)大部分基于C语言实现(依赖NumPy、Cython等底层库),CPython对这类原生扩展的调用效率已经极高,PyPy在该场景下没有优势,甚至会因为额外的兼容层开销拖慢速度。
- PyPy的JIT(即时编译)优势只体现在纯Python代码的优化上,对于调用C扩展的场景,JIT无法发挥作用——执行流程会跳转到原生C代码,PyPy无法对这部分代码做编译优化,反而要承担跨虚拟机的调用成本。
- Pandas并未针对PyPy做专门的优化适配,部分内部逻辑在PyPy环境下可能存在内存管理、数据结构交互等方面的性能损耗。
- 相关性计算(
corr())属于计算密集型的原生操作,CPython直接调用C实现的计算内核,而PyPy需要通过桥接层调用这些C代码,额外的调用成本在大规模数据集的计算中会被显著放大。
内容的提问来源于stack exchange,提问作者Yasir
相关产品推荐
相关产品推荐

