Наиболее эффективное свойство для хеширования массива numpy

Мне нужно иметь возможность хранить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 предлагает лучшую производительность.

Хотя хэширование буфера, доступного только для чтения, само по себе является быстрым, накладные расходы на установку флага для записи фактически замедляют его.

Ответы на вопрос(4)

Ваш ответ на вопрос