9

何度も繰り返す長い計算があります。そのため、パンダと連携してメモ化( jugjoblibなどのパッケージ)を使用したいと思います。問題は、パッケージがメソッド引数としてPandasDataFramesを適切にメモ化するかどうかです。

誰かがそれを試しましたか?これを行うための他の推奨パッケージ/方法はありますか?

4

2 に答える 2

7

ここの水差しの作者:水差しはうまくいきます。私はちょうど以下を試しました、そしてそれは働きます:

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

于 2013-03-20T16:00:02.723 に答える
4

この基本的なメモ化デコレータを使用しますmemoizedhttp://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

は、私にはよく見えますよ。

于 2013-03-14T13:46:12.940 に答える