目前,我正在尝试将一些代码迁移到polars,但注意到了过程中的一些性能差异。
import os, platform, timeit, numpy as np, pandas as pd, polars as pl
data = np.random.rand(100000, 1)
df_pandas = pd.DataFrame(data)
df_polars = pl.DataFrame(data)
def timer(expr):
return round(min(timeit.repeat(expr, repeat=5, number=5)), 8)
print("---- info ----")
print(f"platform={platform.platform()}; processor={platform.processor()}; CPUs={os.cpu_count()}")
print(f"python={platform.python_version()}; numpy={np.__version__}; pandas={pd.__version__}; polars={pl.__version__}")
print("---- pow(2) ----")
print("pandas:", timer(lambda: df_pandas.pow(2)))
print("polars:", timer(lambda: df_polars.select(pl.all().pow(2))))
print("---- sum ----")
print("pandas:", timer(lambda: df_pandas.sum()))
print("polars:", timer(lambda: df_polars.sum()))这个片段的输出是
---- info ----
platform=macOS-11.6.5-x86_64-i386-64bit; processor=i386; CPUs=4
python=3.8.13; numpy=1.22.4; pandas=1.4.2; polars=0.13.47
---- pow(2) ----
pandas: 0.00147684
polars: 0.01482804
---- sum ----
pandas: 0.00300668
polars: 0.00027682这些结果表明,对于包含Python的操作,polars要比pandas慢得多,但是对于直接在select上执行的操作来说,则要快得多。
实际上,我的数据更大(rows > 1,000,000,cols > 100,000),其性能差异要大得多。
任何关于在polars中实现相同(或更好)性能的可能发生的事情以及是否有更快的方法的建议
发布于 2022-06-18 13:44:07
在polars >= 0.13.49中,功率操作被优化为对特定功率的square优化。如果我运行这个,两种操作都比熊猫快。
---- info ----
platform=Linux-5.13.0-51-generic-x86_64-with-glibc2.31; processor=x86_64; CPUs=12
python=3.9.12; numpy=1.22.4; pandas=1.4.2; polars=0.13.49
---- pow(2) ----
pandas: 0.00041451
polars: 0.0003346
---- sum ----
pandas: 0.00157432
polars: 0.00011628https://stackoverflow.com/questions/72669537
复制相似问题