2016-06-02 10 views
2

Wie kann ich Stichproben innerhalb des Intervalls mit gegebenem Intervall durchführen? Zum Beispiel möchte ich einzelne Stichproben zwischen 1 bis 10, aber mit jedem Intervall ist 0,5. Wenn ich das Sampling mache, gibt es mir zB 5.5 oder 2 oder 8.5.Wie wird eine Stichprobe innerhalb eines Intervalls mit einem bestimmten Intervallwert durchgeführt?

Ich habe versucht mit np.random.random_integers (1,10) , aber das gibt mir nur Ganzzahlen Wert. Ihre Hilfe wird freundlich geschätzt.

+1

Wie klein ist Ihr Schritt (z. B. 0,5 in Ihrer Frage) wahrscheinlich und wie groß ist das Intervall (z. B. 1-10 in Ihrer Frage) in einer realen Situation? Wahrscheinlich müssen Sie selbst etwas schreiben, um eine Reihe reeller Zahlen zu erhalten, die selbst bei kleinen Intervallen mit einem kleinen Inkrement sehr groß werden können (z. B. 1-5 mit Schritt 0.0001). –

+1

Warum nicht einfach 'random.randint (2, 20)/2.0' –

Antwort

2

Sie können Ihre eigene Funktion schreiben, die erzeugt eine Zufallszahl skaliert und unscales dann.

from math import floor, ceil 
from random import randint 

def random_step(low, high, step): 
    low_scaled = ceil(float(low)/step) 
    high_scaled = floor(float(high)/step) 
    return randint(low_scaled, high_scaled) * step 

print random_step(3.0, 8.5, 0.5) # 4.5 

Die Ausgabe wird immer ein Vielfaches von step sein.

+0

Eine Erklärung des Downvote würde sehr geschätzt werden. –

+0

Vielen Dank für Ihre Hilfe :). Es funktioniert wirklich. – Jyanto

1

Sie können linspace aus der Bibliothek numpy verwenden. Hier ein Beispiel:

>>> import numpy 
>>> numpy.linspace(0.5, 10, 20) 
array([ 0.5, 1. , 1.5, 2. , 2.5, 3. , 3.5, 4. , 4.5, 
     5. , 5.5, 6. , 6.5, 7. , 7.5, 8. , 8.5, 9. , 
     9.5, 10. ]) 
>>> range_of_numbers = numpy.linspace(0.5, 10, 20) 
>>> random_number = numpy.random.choice(range_of_numbers, size=1) 
>>> print random_number 
[ 9.5] 

Die Ergebnismenge linspace ist in einem Array, aber Sie können mit dieser weiter leicht arbeiten, wenn nötig. Hier finden Sie weitere Informationen zur Verwendung von linspace.


EDIT

Eine weitere Option ist Pylab der frange Bibliothek zu verwenden. Es ist ein Wrapper um matplotlib, aber es lohnt sich, nach der Lösung zu suchen, die Sie erreichen wollen. Hier ist ein Beispiel von frange mit:

>>> import pylab 
>>> pylab.frange(0.5,10,0.5) 
array([ 0.5, 1. , 1.5, 2. , 2.5, 3. , 3.5, 4. , 4.5, 
     5. , 5.5, 6. , 6.5, 7. , 7.5, 8. , 8.5, 9. , 
     9.5, 10. ]) 

Hier einige weitere Dokumentation um frange.


Zusätzliche Hinweise

Während Sie arange verwenden könnte, bedenken Sie, dass es zu Fließkommafehler führt. Die NumPy-Dokumentation empfiehlt, linspace zu verwenden, um die Gleitkommafehler zu vermeiden. Außerdem haben arange und linspace unterschiedliche APIs.

+0

Vielen Dank für Ihre Hilfe. Ich habe es sehr geschätzt. Kann ich numpy.linspace mit den vorher festgelegten Parametern verwenden? Ich habe versucht, niedrig = 1, hoch = 10, Größe = 20, und dann versuche ich numpy.linspace (niedrig, hoch, num = Größe), aber es funktioniert nicht – Jyanto

+0

Es funktioniert. Ich habe einige Fehler in meiner Formel gemacht. Entschuldigung und vielen Dank – Jyanto

+0

Gern geschehen! Eine Erklärung des Downvotes würde sehr geschätzt werden. – abhi

0

können Sie tun:

from random import randrange 

random_number = randrange(2,21)*.5 
Verwandte Themen