Мне нужно иметь возможность хранить numpy
array
в dict
для целей кеширования. Скорость хеширования важна.
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
Похоже, что для этого конкретного случая использования (малые массивы указателей) arr.tostring
обеспечивает лучшую производительность.
В то время как хеширование только для чтения буфера выполняется само по себе, накладные расходы на установку записываемого флага на самом деле делают его более медленным.