के लिए हैश के लिए सबसे अधिक कुशल संपत्ति कैशिंग उद्देश्यों के लिए dict
में मुझे numpy
array
स्टोर करने में सक्षम होना चाहिए। हैश गति महत्वपूर्ण है।numpy array
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
ऐसा लगता है कि इस विशेष उपयोग के मामले के लिए (indicies के छोटे सरणियों), arr.tostring
प्रदान करता है:
मैं जवाब से कुछ उदाहरण शामिल किया गया है रिश्तेदार समय की एक विचार प्राप्त करने के लिए सबसे अच्छा प्रदर्शन।
जबकि केवल पढ़ने-योग्य बफर हैशिंग अपने आप पर तेज है, लिखने योग्य ध्वज को स्थापित करने के ऊपरी हिस्से में यह वास्तव में धीमा हो जाता है।
'arr.tostring() 'वही करता है और अधिक सौंदर्यपूर्ण रूप से प्रसन्न होता है। यदि आपके पास वास्तव में बड़े सरणी हैं तो आप सरणी के केवल एक छोटे हिस्से को स्ट्रिंग करने का प्रयास कर सकते हैं। – root
'tostring' छोटे सरणी के लिए तीव्रता के क्रम भी प्रतीत होता है (हालांकि 400 10000 तत्वों की सरणी के लिए धीमा)। –
... जो वास्तव में काफी स्पष्ट है, क्योंकि 'str' केवल सरणी के सिर और पूंछ को स्वरूपित करता है। –