एक श्रेणी के बीच फ्लोट के यादृच्छिक सरणी उत्पन्न करें


90

मैं एक निश्चित सीमा के बीच दिए गए लम्बाई की यादृच्छिक फ़्लोट्स की एक सरणी उत्पन्न करने के लिए एक फ़ंक्शन खोजने में सक्षम नहीं हुआ हूं।

मैंने रैंडम सैंपलिंग को देखा है, लेकिन कोई फ़ंक्शन ऐसा नहीं लगता है जो मुझे चाहिए।

random.uniform करीब आती है लेकिन यह केवल एक ही तत्व देता है, एक विशिष्ट संख्या नहीं।

यह मैं के बाद कर रहा हूँ:

ran_floats = some_function(low=0.5, high=13.3, size=50)

जो 50 यादृच्छिक गैर-अद्वितीय फ़्लोट्स की एक सरणी लौटाएगा (अर्थात: पुनरावृत्ति की अनुमति है) समान रूप से सीमा में वितरित किया गया है [0.5, 13.3]

क्या ऐसा कोई समारोह है?


5
आपने प्रश्न को टैग कर दिया है numpy, लेकिन आपने इसका उल्लेख नहीं किया है numpy.random.uniform, भले ही उसके पास आपके द्वारा हस्ताक्षरित कॉल हस्ताक्षर हों। क्या आपके पास numpyपुस्तकालय उपलब्ध है?
डीएसएम

1
[random.uniform(low, high) for i in xrange(size)]
Phylogenesis

1
@DSM हाँ मेरे पास है और आप जाहिरा तौर पर 100% सही हैं। मुझे वह फंक्शन याद आ गया और वह ठीक वैसा ही करने लगा जैसा मुझे चाहिए। क्या आप अपनी टिप्पणी को उत्तर के रूप में प्रस्तुत करना चाहेंगे?
गैब्रियल

जवाबों:


144

np.random.uniform आपके उपयोग के मामले में फिट बैठता है:

sampl = np.random.uniform(low=0.5, high=13.3, size=(50,))

अद्यतन अक्टूबर 2019:

जबकि वाक्यविन्यास अभी भी समर्थित है, ऐसा लगता है कि यादृच्छिक संख्या जनरेटर पर अधिक से अधिक नियंत्रण का समर्थन करने के लिए एपीआई 1.17 नंबर के साथ बदल गया है। आगे जाकर एपीआई बदल गया है और आपको https://docs.scipy.org/doc/numpy/reference/random/generated/numpy.random.Generator.uniform.html देखना चाहिए

एन्हांसमेंट प्रस्ताव यहां है: https://numpy.org/neps/nep-0019-rng-policy.html


23
ओपी का सहज खोज प्रश्न है some_function(low=0.5, high=13.3, size=50)। यह अच्छी तरह से अजगर के लिबास में डिजाइन किए गए हैं #wow
Saravanabalagi Ramachandran

आकार पूरी तरह से स्पष्ट नहीं था और लिंक काम नहीं करता है। यहाँ एक मामूली स्पष्टीकरण है। आकार: इंट्स या टुप्स ऑफ़ किट्स, वैकल्पिक। आउटपुट आकार। यदि दी गई आकृति है, जैसे, (m, n, k), तो m * n * k नमूने खींचे जाते हैं। यदि आकार कोई भी डिफ़ॉल्ट नहीं है), एक एकल मान लौटाया जाता है यदि निम्न और उच्च दोनों स्केलर हैं।
vlad

@vlad - लिंक के साथ मुद्दे को इंगित करने के लिए धन्यवाद। मैंने वर्तमान उपयोग को उम्मीद से कवर करने के लिए उत्तर को अपडेट किया है।
जोशेल

21

सूची समझ का उपयोग क्यों नहीं करते?

अजगर 2 में

ran_floats = [random.uniform(low,high) for _ in xrange(size)]

पायथन 3 में, ( रेफरी ) की rangeतरह काम करता हैxrange

ran_floats = [random.uniform(low,high) for _ in range(size)]

3

एक सूची समझ के साथ random.uniform गठबंधन क्यों नहीं ?

>>> def random_floats(low, high, size):
...    return [random.uniform(low, high) for _ in xrange(size)]
... 
>>> random_floats(0.5, 2.8, 5)
[2.366910411506704, 1.878800401620107, 1.0145196974227986, 2.332600336488709, 1.945869474662082]

3

आप जो खोज रहे हैं, उसे करने के लिए पहले से ही एक फंक्शन हो सकता है, लेकिन मुझे इसके बारे में (अभी तक?) जानकारी नहीं है। इस बीच, मैं चीनी का प्रयोग करूंगा:

ran_floats = numpy.random.rand(50) * (13.3-0.5) + 0.5

यह 0.5 और 13.3 के बीच एक समान वितरण के साथ आकार (50) की एक सरणी का उत्पादन करेगा।

आप किसी फ़ंक्शन को भी परिभाषित कर सकते हैं:

def random_uniform_range(shape=[1,],low=0,high=1):
    """
    Random uniform range

    Produces a random uniform distribution of specified shape, with arbitrary max and
    min values. Default shape is [1], and default range is [0,1].
    """
    return numpy.random.rand(shape) * (high - min) + min

संपादित करें : हम्म, हाँ, तो मैं इसे याद किया, वहाँ एक ही सटीक कॉल के साथ numpy.random.uniform () है! import numpy; help(numpy.random.uniform)अधिक जानकारी के लिए प्रयास करें ।


3

सूची बोध में पाश के लिए समय लगता है और यह धीमा कर देता है। यह खस्ता मापदंडों (कम, उच्च, आकार, ..etc) का उपयोग करना बेहतर है

import numpy as np
import time
rang = 10000
tic = time.time()
for i in range(rang):
    sampl = np.random.uniform(low=0, high=2, size=(182))
print("it took: ", time.time() - tic)

tic = time.time()
for i in range(rang):
    ran_floats = [np.random.uniform(0,2) for _ in range(182)]
print("it took: ", time.time() - tic)

नमूना उत्पादन:

('यह लिया गया:', 0.06406784057617188)

('यह लिया गया:', 1.7253198623657227)


3

वैकल्पिक रूप से आप SciPy का उपयोग कर सकते हैं

from scipy import stats
stats.uniform(0.5, 13.3).rvs(50)

और पूर्णांक के नमूने के रिकॉर्ड के लिए

stats.randint(10, 20).rvs(50)


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.