2010-11-04 19 views
10

मुझे यकीन है कि विपरीत कई बार पूछा गया है लेकिन मुझे खराब यादृच्छिक संख्याएं उत्पन्न करने के बारे में कोई जवाब नहीं मिला।खराब रैंडम नंबर कैसे उत्पन्न करें

मैं क्लस्टर विश्लेषण के लिए एक छोटा प्रोग्राम लिखना चाहता हूं और परीक्षण के लिए कुछ यादृच्छिक अंक उत्पन्न करना चाहता हूं। अगर मैं यादृच्छिक निर्देशांक के साथ 1000 अंक डाल दूंगा तो वे पूरे क्षेत्र में बिखरे हुए होंगे जो क्लस्टर विश्लेषण को बेकार बना देगा।

क्या क्लस्टर बनाने वाले रैंडम नंबर उत्पन्न करने का कोई आसान तरीका है?

मैंने पहले से ही random() का उपयोग नहीं किया है, लेकिन random()*random() जो आमतौर पर वितरित संख्या उत्पन्न करता है (मुझे लगता है कि मैंने इसे कहीं स्टैक ओवरफ़्लो पर पढ़ा है)।

दूसरा दृष्टिकोण कुछ क्षेत्रों को यादृच्छिक रूप से उठाएगा और इस क्षेत्र में फिर से बिंदु पीढ़ी चलाएगा जो इस क्षेत्र में क्लस्टर का उत्पादन करेगा।

क्या आपके पास बेहतर विचार है?

+0

आप क्या कहा: या तो एक वितरण या समूहों पर फैसला और का उपयोग कर यादृच्छिक संख्या उत्पन्न कि प्रायिकता घनत्व समारोह के रूप में। –

+7

मुझे http://dilbert.com/dyn/str_strip/000000000/00000000/0000000/000000/00000/2000/300/2318/2318.strip.gif – Gumbo

+0

मुझे याद दिलाता है कि आप इस प्रश्न के बारे में बात कर रहे हैं: http: //stackoverflow.com/questions/3956478/understanding- यादृच्छिकता 'यादृच्छिक() * यादृच्छिक() ' –

उत्तर

7

यदि आप जानबूझकर अच्छी तरह से गठित क्लस्टर (पूरी तरह से यादृच्छिक क्लस्टर के बजाए) का उत्पादन कर रहे हैं, तो आप दोनों को क्लस्टर सेंटर खोजने के लिए जोड़ सकते हैं, और उसके बाद सामान्य वितरण में इसके चारों ओर बहुत सारे अंक डाल सकते हैं।

साथ ही कार्टेशियन कॉर्ड (x, y) में काम करना; आप एक विशेष क्लस्टर के लिए अंक वितरित करने के लिए एक रेडियल विधि का उपयोग कर सकते हैं। एक यादृच्छिक कोण (0-2पीआई रेडियंस) चुनें, फिर त्रिज्या चुनें। ध्यान दें कि परिधि आनुपातिक त्रिज्या है, इसलिए क्षेत्र वितरण केंद्र के नजदीक घनत्व होगा - लेकिन प्रति विशिष्ट त्रिज्या वितरण समान होगा। अधिक कसकर पैक किए गए क्लस्टर का उत्पादन करने के लिए रेडियल वितरण को संशोधित करें।

या आप प्राकृतिक क्लस्टरिंग के साथ अर्ध-यादृच्छिक बिंदु वितरण के लिए असली दुनिया व्युत्पन्न डेटा का उपयोग कर सकते हैं। हाल ही में मैं भू-स्थानिक क्लस्टर विश्लेषण का थोड़ा सा कर रहा हूं। इसके लिए मैंने असली दुनिया डेटा का उपयोग किया है - ज़िपकोड सेंट्रॉइड (जो शहरों के आसपास प्राकृतिक क्लस्टर बनाते हैं); और रेस्तरां के स्थान। एक और सुझाव: आप एक तारकीय सूची या गैलेक्टिक कैटलॉग का उपयोग कर सकते हैं।

+3

ज़िपकोड सेंट्रॉइड, अच्छा के बारे में बात करते समय। – Debilski

5

कुछ एंकर उत्पन्न करें। सही यादृच्छिक संख्या। तो फिर उनके आसपास शोर उत्पन्न:

anchor + dist * (random() - 0.5))

इस संकुल नंबर, कि समान रूप से दूरी dist में वितरित किया जाएगा उत्पन्न होगा।

0

मेरा पहला विचार यह था कि आप linear congruential generator का उपयोग करके स्वयं को कार्यान्वित कर सकते हैं और गुणांक के साथ प्रयोग कर सकते हैं जब तक कि आपको अपनी आवश्यकताओं के अनुरूप पर्याप्त अवधि नहीं मिल जाती। वास्तव में कम m गुणांक चाल चलाना चाहिए।

मुझे क्लस्टर बनाने के लिए कुछ पूर्व-चयनित बिंदुओं के आस-पास एक अच्छा आरएनजी चलाने का दूसरा विचार भी पसंद है। आप या तो इस विधि के साथ क्लस्टर के लिए विशिष्ट क्षेत्रों को लक्षित कर सकते हैं, या उन यादृच्छिक रूप से भी उत्पन्न कर सकते हैं।

1
  • अपने मॉडल में एक अतिरिक्त आयाम जोड़ें।
  • एक अनियमित (यानी फ्लैट नहीं) सतह बनाएं।
  • विस्तारित स्थान में संख्याएं उत्पन्न करें।
  • सतह के एक तरफ सभी संख्याओं को छोड़ दें।
  • प्रत्येक नंबर से शेष, अतिरिक्त आयाम ड्रॉप करें।
1

शायद मैं गलत समझा है, लेकिन gnu वैज्ञानिक पुस्तकालय (ग में लिखा) कई के भीतर लिखित वितरण है - आपको लगता है कि पुस्तकालय से गाऊसी/प्वाइजन आदि से निर्देशांक लेने नहीं कर सकता है?

http://www.gnu.org/software/gsl/manual/html_node/Random-Number-Distributions.html

वे लिंक से प्वासों बंटन के साथ एक सरल उदाहरण भी प्रदान करते हैं।

यदि आपको बाध्य होने के लिए अपने वितरण की आवश्यकता है (उदाहरण के लिए y-coordinate -1 से कम नहीं) तो आप जीएसएल में समान वितरण से अस्वीकृति नमूनाकरण प्राप्त कर सकते हैं।

आशीर्वाद, टॉम

+0

ओपी पर्यावरण का उपयोग नहीं करता है जिसका उपयोग वह कर रहा है, और जीएनयू लाइसेंस शायद उसकी परियोजना के लिए उपयुक्त नहीं हो सकता है। – winwaed