何度も繰り返す長い計算があります。そのため、パンダと連携してメモ化( jugやjoblibなどのパッケージ)を使用したいと思います。問題は、パッケージがメソッド引数としてPandasDataFramesを適切にメモ化するかどうかです。
誰かがそれを試しましたか?これを行うための他の推奨パッケージ/方法はありますか?
何度も繰り返す長い計算があります。そのため、パンダと連携してメモ化( jugやjoblibなどのパッケージ)を使用したいと思います。問題は、パッケージがメソッド引数としてPandasDataFramesを適切にメモ化するかどうかです。
誰かがそれを試しましたか?これを行うための他の推奨パッケージ/方法はありますか?
ここの水差しの作者:水差しはうまくいきます。私はちょうど以下を試しました、そしてそれは働きます:
from jug import TaskGenerator
import pandas as pd
import numpy as np
@TaskGenerator
def gendata():
return pd.DataFrame(np.arange(343440).reshape((10,-1)))
@TaskGenerator
def compute(x):
return x.mean()
y = compute(gendata())
pickle
内部で使用するほど効率的ではありませんDataFrame
(ただし、オンザフライで圧縮するため、メモリの使用に関してはひどいものではなく、実際よりも遅くなります)。
私は、jugが現在numpy配列に対して行っているように、これらを特別なケースとして保存する変更を受け入れるでしょう:https ://github.com/luispedro/jug/blob/master/jug/backends/file_store.py#L102
この基本的なメモ化デコレータを使用しますmemoized
。http://wiki.python.org/moin/PythonDecoratorLibrary#Memoize
DataFrameはハッシュ可能であるため、正常に機能するはずです。これが例です。
In [2]: func = lambda df: df.apply(np.fft.fft)
In [3]: memoized_func = memoized(func)
In [4]: df = DataFrame(np.random.randn(1000, 1000))
In [5]: %timeit func(df)
10 loops, best of 3: 124 ms per loop
In [9]: %timeit memoized_func(df)
1000000 loops, best of 3: 1.46 us per loop
は、私にはよく見えますよ。