मैं एक शब्दकोश में क्रमबद्ध tuples के लिए एक तेज लुकअप को लागू करने की कोशिश कर रहा हूँ; ऐसा कुछ जो प्रश्न का उत्तर देता है "क्या टुपल (3,8) का एक संबद्ध मूल्य होता है, और यदि हां, तो यह क्या है?"। Tuples में पूर्णांक 0 से नीचे और अधिकतम से max_int द्वारा बाध्य होना चाहिए।पाइथन tuples कुंजी के रूप में धीमा?
मैं आगे बढ़ गया और पायथन के निर्देश का उपयोग किया लेकिन पाया कि यह बहुत धीमी है। इस समस्या का एक अन्य दृष्टिकोण max_int (अधिकतर खाली) dicts के साथ एक सूची टी बनाना होगा, और प्रत्येक tuple (3,8) के लिए टी [3] [8] = मान डाल दिया जाएगा। हालांकि यह वास्तव में बाल्टी-हैश दृष्टिकोण है कि पाइथन डिक्ट्स के साथ लेता है, लेकिन बाद वाला लगभग 30 गुना (!) तेज़ है।
इसके अलावा, यह बदसूरत है (विशेष रूप से जब से मैं अब 3-टुपल्स को लागू करने वाला हूं), इसलिए मैं यहां कुछ संकेतों की सराहना करता हूं।
import numpy as np
import time
# create a bunch of sorted tuples
num_tuples = 10
max_int = 100
a = np.random.rand(num_tuples,2) * max_int
a = a.astype(int)
for k in xrange(len(a)):
a[k] = np.sort(a[k])
# create dictionary with tuples as keys
d = {}
for t in a:
d[tuple(t)] = 42
print d
# do some lookups
m = 100000
start_time = time.time()
for k in xrange(m):
(3,8) in d.keys()
elapsed = time.time() - start_time
print elapsed
# now create the bucket-list structure mentioned above
t = [{} for k in xrange(max_int)]
for k in xrange(len(a)):
t[a[k][0]][a[k][1]] = 42
print t
# do some lookups
m = 10000
start_time = time.time()
for k in xrange(m):
8 in t[3].keys()
elapsed = time.time() - start_time
print elapsed
'डी' के बजाय 'd.keys()' में उपयोग करके आपके समय का एक अच्छा हिस्सा बर्बाद हो गया है; मेरे लिए 1.11/0.003 से 0.018/0.0017 के समय कम हो गया। यदि आप टेबल पर इस तरह के अनुकूलन छोड़ रहे हैं तो यह गति के बारे में चिंतित होने के लिए मूर्खतापूर्ण है। – DSM
आप अपने मानक को करने के लिए 'timeit' का उपयोग कर सकते हैं। रास्ता आसान है। –