【发布时间】:2017-10-18 15:13:39
【问题描述】:
我正在尝试使用 @functools.lru_cache() 注释来记忆方法 foo(dti: DatetimeIndex)。但是,它向TypeError: unhashable type: 'DatetimeIndex' 抱怨。
既然DatetimeIndex 对象是不可变的,那么应该有一种很好的方法可以将它们用作记忆的键,对吧?
另外,DatetimeIndex 定义一个哈希方法来简单地返回它的id() 会有什么问题?
【问题讨论】:
-
不是“记忆”,记忆。见en.wikipedia.org/wiki/Memoization。
-
我想缓存它只是因为计算
foo很昂贵。在我的情况下,这是一个本质上昂贵的操作,我几乎无法让它更快。 -
是的,是的,否则我不会寻找解决方案。我不知道你为什么怀疑它。举个例子:假设用户可以交互输入任意整数,我们想要对每个整数进行质数分解。除非您缓存先前分解的输出,否则无法避免返工。就是这样的情况 - 我不知道我会看到什么
DatetimeIndex值,但我想避免重做我最近已经完成的工作。 -
不,它需要查看整个
DatetimeIndex对象。它是整个对象的函数。 -
对不起@MaxU,但这已经是我想问的确切问题,我真的不明白为什么你认为它定义不明确或不应该问。问题是关于
DatetimeIndex对象的记忆和散列,而不是我是否可以优化其他一些不讨论的调用代码。
标签: python pandas hash memoization datetimeindex