1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Polarsの速度比較(vstack vs concat)

Posted at

Polarsでは、concatはメモリコピーをして、vstackはメモリコピーをしないようです。

バージョン1.12.0で確かめてみました。

比較

16 x 16のdf1n回結合してみます。
メモリコピーしていれば、結合回数の自乗で計算時間が増えていくはずです。

import numpy as np
import polars as pl
from timeit import timeit

df1 = pl.DataFrame(
    np.arange(256).reshape(16, -1),
    [f"col{i:02}" for i in range(16)],
)

concat_code = """\
df = df1
for _ in range(n):
    df = pl.concat([df, df1])
"""

vstack_code = """\
df = df1
for _ in range(n):
    df = df.vstack(df1)
"""

times = [1, 100, 200, 300, 400]

vstack_times = [
    timeit(vstack_code, number=100, globals=locals())
    for n in times
]

concat_times = [
    timeit(concat_code, number=100, globals=locals())
    for n in times
]

image.png

図からはわかりにくいですが、どちらも自乗で増えています。
また、vstackの方が速いですが、2倍くらいしか違いません。思ったほど違いません。

なお、結合だけならvstackの方が速いですが、このあと加工したときにvstackの方が遅いかもしれません。

私の結論

  • (シビアな状況でなければ)どちらでも良さそう
  • 気になるなら、計測してみればよい

以上

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?