में पूर्णांक यादृच्छिक सूची बनाएं मैं परीक्षण प्रयोजनों के लिए पूर्णांक यादृच्छिक सूची बनाने के लिए चाहते हैं। संख्याओं का वितरण महत्वपूर्ण नहीं है। गिनती की एकमात्र चीज समय है। मुझे पता है कि यादृच्छिक संख्याएं एक समय लेने वाला कार्य है, लेकिन एक बेहतर तरीका होना चाहिए।अजगर
import random
import timeit
# random lists from [0-999] interval
print [random.randint(0,1000) for r in xrange(10)] # v1
print [random.choice([i for i in xrange(1000)]) for r in xrange(10)] # v2
# measurement:
t1 = timeit.Timer('[random.randint(0,1000) for r in xrange(10000)]','import random') # v1
t2 = timeit.Timer('random.sample(range(1000), 10000)','import random') # v2
print t1.timeit(1000)/1000
print t2.timeit(1000)/1000
वी 2 v1 की तुलना में तेजी है, लेकिन इस तरह के एक बड़े पैमाने पर काम नहीं कर रहा:
यहाँ मेरे वर्तमान समाधान है। यह निम्न त्रुटि देता है: 'ValueError: नमूना आबादी से भी बड़ा'
आप तीव्र, कुशल समाधान है कि उस पैमाने में काम करता है पता है?
संपादित करें:
एंड्रयू: 0,000290962934494
gnibbler की: 0,0058455221653
KennyTM की: 0,00219276118279
NumPy, आया देखा था, पर विजय प्राप्त की
धन्यवाद!
बेशक यह काम नहीं करता है। 'random.sample()' आबादी को कम करता है, जिससे संख्या कम और कम यादृच्छिक होती है। एक बार पूरी आबादी समाप्त हो जाने के बाद, आगे नमूना असंभव है। –
जब आप कहते हैं कि यह परीक्षण उद्देश्यों के लिए है, परीक्षण कब तक लगेगा? –
सिमुलेशन के लिए, जहां समय एक आवश्यकता है (लेकिन क्रिप्टो और सुरक्षा नहीं है), फिर एक [रैखिक संगठनात्मक जनरेटर (एलसीजी)] (https://en.wikipedia.org/wiki/Linear_congruential_generator) अक्सर उपयोग किया जाता है। मेरा मानना है कि [मेर्सन ट्विस्टर] (https://en.wikipedia.org/wiki/Mersenne_Twister) तेज़ है (लेकिन एलसीजी से धीमा), और यदि मैं सही ढंग से याद करता हूं, तो यह एक समान वितरण प्रदान करता है। – jww