2017-03-20 2 views
1

Ich möchte sagen, 10 Gleitkommazahlen zwischen 0. und 2*np.pi, die nicht im Bereich (np.radians(101),np.radians(298)) sind. Die Brute-Force-Methode istPython: Zeichnung zufällige Gleitkommazahlen mit Ausnahme einiger Intervall

rand_ra=[] 
while len(rand_ra) <= 10: 
    x=np.random.uniform(0.,2*np.pi,100) #pick 100 or whatever number you want 
    for y in x : 
     if 0. <= y <= np.radians(101) and np.radians(298)<=y<= 2.*np.pi : 
      rand_ra.append(y) 

print rand_ra 

Aber das ist super langsam, weil die ausgeschlossene Region so groß ist. Gibt es eine weniger zeitaufwendige Methode?

Danke!

Antwort

4

Da es sich um einen Kreis handelt, ist dies identisch mit Zeichnungsnummern in nur dem Bereich [np.radians(298) - 2 * pi, np.radians(101)].

Das heißt:

sample = np.random.uniform(np.radians(298) - 2 * np.pi, np.radians(101), 100) 

Dann einfach diejenigen normalisieren, die weniger als 0

sample[sample < 0] += 2 * np.pi 
+1

@HuShu Aw, geben Sie ihm die Punkte. Das war eine kluge Antwort, ich habe sie selbst aufgewertet. – pjs

+1

@pjs vereinbart! :) – HuShu

4

Die Größe des ausgeschlossenen Bereichs vorab berechnen, size = np.radians(298) - np.radians(101). Werte y zwischen 0. und 2*np.pi - size generieren. Wenn y größer als np.radians(101) ist, fügen Sie size hinzu.

Verwandte Themen