我是jug的作者:jug很好用。我刚刚尝试了以下内容,它可以正常工作:
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())
它并不像可能的那样高效,因为它仅在DataFrame
内部使用pickle
(虽然它会即时压缩,所以在内存使用方面并不可怕;只是比可能的更慢)。
如果像jug当前对于numpy数组一样将其保存为特殊情况,我会持开放态度:https://github.com/luispedro/jug/blob/master/jug/backends/file_store.py#L102
memoized
。 http://wiki.python.org/moin/PythonDecoratorLibrary#Memoize
数据框是可哈希的,所以应该可以正常工作。以下是一个例子。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
看起来不错。
hash(pd.DataFrame([1,2,3]))
,它会返回不同的值。 - Yariv__hash__
成为id(我认为这基本上就是它以前的作用了)。 - Andy Hayden
compute(gendata())
时会发生什么?它是否实际从缓存中加载 DataFrame? - Yarivgendata()
是在不同的进程中计算的,那么是的。 - luispedropython
命令而不是jug
命令来运行 jug? - Light