我需要能够将 a 存储numpy
array
在 a 中以dict
用于缓存目的。哈希速度很重要。
代表指标,因此虽然对象的array
实际身份并不重要,但其价值才是。可变性不是问题,因为我只对当前值感兴趣。
我应该散列什么才能将其存储在dict
?
我目前的方法是使用str(arr.data)
,这比md5
我的测试更快。
我从答案中结合了一些示例,以了解相对时间:
In [121]: %timeit hash(str(y))
10000 loops, best of 3: 68.7 us per loop
In [122]: %timeit hash(y.tostring())
1000000 loops, best of 3: 383 ns per loop
In [123]: %timeit hash(str(y.data))
1000000 loops, best of 3: 543 ns per loop
In [124]: %timeit y.flags.writeable = False ; hash(y.data)
1000000 loops, best of 3: 1.15 us per loop
In [125]: %timeit hash((b*y).sum())
100000 loops, best of 3: 8.12 us per loop
对于这个特定的用例(小的索引数组),似乎arr.tostring
提供了最佳性能。
虽然散列只读缓冲区本身很快,但设置可写标志的开销实际上使其变慢。