numpy

2011-12-14 18 views
30

में गैर-दोहराव यादृच्छिक संख्या मेरा प्रश्न है: मैं गैर-दोहराव वाले यादृच्छिक संख्या को numpy में कैसे उत्पन्न कर सकता हूं?numpy

list = np.random.random_integers(20,size=(10)) 
+0

"गैर-दोहराव" से आपका क्या मतलब है? यादृच्छिक संख्याओं का अनुक्रम कभी नहीं चलता है? यह संभव नहीं है, क्योंकि यादृच्छिक संख्या जनरेटर की स्थिति को कंप्यूटर की सीमित स्मृति में फिट होना आवश्यक है। या आप का मतलब है कि कोई भी संख्या दो बार नहीं होती है? –

+3

गैर-दोहराव का मतलब है कि आपके पास कोई डुप्लिकेट वाली कोई सूची नहीं है। – Polynomial

+1

शायद आपको यादृच्छिक क्रमपरिवर्तन की आवश्यकता है? http://docs.scipy.org/doc/numpy/reference/generated/numpy.random.permutation.html – cyborg

उत्तर

40

आप NumPy का उपयोग करने पर जोर देते हैं नहीं है, तो आप मानक पुस्तकालय से random.sample() उपयोग कर सकते हैं:

a = numpy.arange(20) 
numpy.random.shuffle(a) 
print a[:10] 
+0

प्रिंट random.sample (रेंज (20), 10) पायथन 2.6 के साथ काम नहीं करता है ?! – Academia

+1

@ उपयोगकर्ता 1038382: मेरे लिए काम करता है। "काम नहीं करता" मतलब क्या है? –

+0

मुझे यह त्रुटि देता है: "अपरिभाषित चर: यादृच्छिक" – Academia

-2

बस एक सरणी है कि संख्या के आवश्यक रेंज शामिल उत्पन्न तो बार-बार सरणी में 0 तत्व के साथ एक यादृच्छिक एक स्वैप करके उन्हें शफ़ल। यह एक यादृच्छिक अनुक्रम उत्पन्न करता है जिसमें डुप्लिकेट मान नहीं होते हैं।

+1

परिणामस्वरूप यादृच्छिक अनुक्रम की एक और संपत्ति यह है कि [यह विशेष रूप से यादृच्छिक नहीं है] (http: //www.codinghorror .com/ब्लॉग/2007/12 /-खतरे के- naivete.html)। –

+0

@SvenMarnach - अधिकांश उद्देश्यों के लिए, हालांकि, यह पर्याप्त यादृच्छिक है। वह डबल-यादृच्छिक दृष्टिकोण का उपयोग कर सकता है अगर वह इसे और अधिक यादृच्छिक चाहता था। – Polynomial

+0

यह व्यर्थ है। ओपी इसे सही करने के लिए लाइब्रेरी कॉल का उपयोग कर सकते हैं। वे उपयोग करना आसान है, तेजी से दौड़ते हैं और एक कस्टम संस्करण की तुलना में अधिक पठनीय हैं। मैं किसी भी कारण से नहीं सोच सकता कि मुझे गलत एल्गोरिदम का उपयोग क्यों करना चाहिए क्योंकि यह शायद "यादृच्छिक पर्याप्त" है, सही एल्गोरिदम का उपयोग करते समय कोई नुकसान नहीं होता है। –

43

मैं:

print random.sample(range(20), 10) 
NumPy साथ

, आप numpy.random.shuffle() और टुकड़ा करने की क्रिया का उपयोग करना होगा लगता है कि numpy.random.sample अभी काम नहीं करता है। यह मेरा तरीका है:

import numpy as np 
np.random.choice(range(20), 10, replace=False) 
+10

'पसंद 'के पहले तर्क के रूप में' श्रेणी (एन) '(या' arange (n) ') के बजाय, यह केवल' n' पास करने के बराबर है, उदा। 'पसंद (20, 10, प्रतिस्थापित = गलत)'। –