是否如预期的那样,Polars 对于简单算术运算的性能比 Numpy 慢?

Kep*_*ain 1 numpy python-polars

我进行基准测试的任务只是按元素裁剪值。我已经使用numpy和完成了此操作polars。但是,事实证明,使用numpy比使用要快得多(~5 倍)polars(如下所示)。

所以,我的问题是:

  • 这种行为是否符合预期?
  • 如果是这样,这是否意味着polars(尽管它针对 join/groupby 进行了高度优化),可能不太适合执行相对简单的数值向量/数组操作,例如我的示例中的裁剪?
import timeit
import numpy as np
import polars as pl

N = 10_000_000
x = np.random.normal(size=N)
y = np.random.normal(size=N)
z = y + 0.5
df = pl.DataFrame({"x": x, "y": y, "z": z})

>>> timeit.timeit(lambda: np.minimum(np.maximum(x, y), z), number=10)
0.60923

>>> timeit.timeit(lambda: df.select(pl.min(pl.max(pl.col("x"), pl.col("y")), pl.col("z"))), number=10)
3.39337
Run Code Online (Sandbox Code Playgroud)

rit*_*e46 8

2023 年 4 月 25 日更新

截至目前,polars >= 0.17.8我们对其进行了更多优化。现在更近了。

我们的横向min操作并没有真正优化。如果您提出问题,我们可以改进它。我们的大部分优化注意力都集中在昂贵的操作上。

这取决于

要回答你的问题,不,这取决于。

  • 对于柱状操作,Polar 可以实现相同的数值性能。
  • 对于行操作和使用 bla 的操作(如点积),速度会更慢。

总的来说,极地可能更快;通常,许多操作能够并行运行。如果您觉得某个区域太慢,请提出问题。