我需要能够存储numpy
array
在dict
为了缓存的目的。哈希速度很重要。最有效的财产散列numpy阵列
array
表示指示,所以虽然对象的实际身份不重要,但值是。 Mutabliity不是一个问题,因为我只对目前的价值感兴趣。
我应该散列什么来存储它在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
这样看来,这个特定用例(indicies的小数组),arr.tostring
提供最棒的表演。
虽然散列只读缓冲区本身很快,但设置可写入标志的开销实际上使其变慢。
'arr.tostring()'也是一样的,更美观。如果你有非常大的数组,你可以尝试只对数组的一小部分进行字符串化。 – root
对于小型阵列,“tostring”似乎也快几个数量级(尽管对于10000个元素的阵列来说速度要慢4倍)。 –
......这实际上很明显,因为'str'只格式化数组的头部和尾部。 –