2017-10-18 3 views
1

Ich habe den folgenden Code ein paar Zufallszahl zu erzeugen:generieren entsprechende Listen von Zufallszahlen mit Einschränkungen

import random 
random.seed(1) 

lambdaj = [] 
tauj = [] 

for i in range(30): 
    lambdaj.append(random.randint(2, 15)) 
    tauj.append(random.uniform(10/365, 40/365)) 

#What I want is: 

for i in range(len(tauj)): 
    if lambdaj[i]*tauj[i] >= 1: 
     #RECALCULATE lambdaj and tauj by increasing the random.seed by 1 

Also, was soll ich tun, um das ich einige Listen von lambdaj und tauj haben will, jedoch Ich möchte nicht bezogenlambdaj[i]*tau[j] >= 1. Sie sollten alle < 1 sein. Also, denke ich, muss ich meinen Samen erhöhen und einen Samenwert finden, der meine Anforderungen erfüllt. Allerdings konnte ich keine funktionierende for-Schleife finden, die das tut. Jeder Vorschlag wird geschätzt.

Antwort

1

Sie Frage impliziert, dass jedes von multipliziert Lambda jeder Tau sein muss weniger als 1 (i * j), aber Ihr Test bedeutet, dass eigentlich nur Sie mit ähnlichen lambdas und Taus Pflege (i * i):

lambdaj[i] * tauj[j] (In words) 
lambdaj[i] * tauj[i] (Your code test) 

Code Unter der Annahme ist, was Sie gemeint, dann gibt es keine Notwendigkeit, einen guten Samen zu finden: einfach den „schlechten“ Index regenerieren:

for i in range(len(tauj)): 
    while lambdaj[i] * tauj[i] >= 1: 
     lambdaj[i] = random.randint(2, 15) 
     tauj[i] = random.uniform(10/365, 40/365) 

Alternativ tun dies nur, während die Daten zu erzeugen:

for i in range(30): 
    l = j = 5 # something larger than 1 
    while l * j >= 1: 
     l = random.randint(2, 15) 
     j = random.uniform(10/365, 40/365) 
    lambdaj.append(l) 
    tauj.append(j) 

Und in der Tat, wenn Sie sich für wirklich zufällige Daten suchen, dann nicht immer geben Sie Ihre Samen. Mit dieser Methode, und indem Sie den Startwert (z. B. .seed(1)) nicht festlegen, wird Ihre Einschränkung garantiert und Ihre Daten werden für jeden Skriptaufruf zufällig sein.

+0

Das war ein Wording-Fehler, nur editiert. – user8028576

+0

Ich glaube, die Antwort ist immer noch auf Ziel. – hunteke

+0

Die zweite Alternative hat gut funktioniert. Das erste funktionierte jedoch nicht, obwohl ich es auf verschiedene Arten ausprobierte. Trotzdem, vielen Dank. Du hast mein Problem definitiv gelöst. – user8028576

Verwandte Themen