2017-06-17 4 views
0

Ich möchte N Arrays mit fester Länge n von Zufallszahlen mit numpy generieren, aber Arrays müssen Zahlen zwischen verschiedenen Bereichen variieren.Effiziente Möglichkeit zur Generierung von N Arrays von Zufallszahlen zwischen verschiedenen Bereichen

So zum Beispiel mag ich N = 100 Arrays der Größe n = 5 und jedes Array seine Nummern müssen erzeugen muß zwischen:

  • Erster Zahl zwischen 0 und 10
  • Zweiter Zahl zwischen 20 und 100

und so weiter ...

erste Idee, die mir in den Sinn kommt, ist, etwas zu tun wie:

first=np.random.randint(0,11, 100) 
second=np.random.randint(20,101, 100) 
... 

Und dann sollte ich sie verschachteln, gibt es einen effizienteren Weg?

+0

Wie definieren Sie die Bereiche? Wie für 100 verschiedene Bereiche, muss es einen programmatischen Weg geben, um es zu definieren? – Psidom

+0

Generieren Sie diese Arrays wiederholt im Skript oder nur einmal am Anfang. Wenn es nur einmal ist, ist es wahrscheinlich nicht die Mühe wert, sich Gedanken über die Effizienz zu machen und einfach weiterzugehen und die 100 Bereiche zu durchlaufen. – hpaulj

+0

@hpaulj Diese Arrays werden einmal im Skript generiert – D1X

Antwort

0

Ich würde sie nur in einem anderen Array setzen und durchlaufen sie durch ihren Index

from np.random import randint 
array_holder = [[] for i in range(N)] # Get N arrays in a holder 
ab_holder = [[a1, b1], [a2, b2]] 
for i in range(len(array_holder)): # You iterate over each array 
    [a, b] = [ab_holder[i][0], ab_holder[i][1]] 
    for j in range(size): # Size is the ammount of elements you want in each array 
     array_holder[i].append(randint(a, b)) # Where a is your base and b ends the range 
+0

a, b sind nicht eindeutig. – D1X

+0

Deshalb sind sie Variablen, fügen in diesen Code ein, was a und b ändert, editierten Code und fügten eine Möglichkeit hinzu, a- und b-Werte fest zu codieren (falls sie nicht von einer Funktion zurückgegeben werden) –

0

Eine andere Möglichkeit. Einstellung ranges zeigt an, wie die Bereiche der einzelnen Teile jedes Arrays sein müssen und wie viele es sind. size ist die Anzahl der Werte, die in jedem einzelnen Teil eines Arrays abgetastet werden. N ist die Größe des Monte-Carlo-Beispiels. arrays ist das Ergebnis.

import numpy as np 

ranges = [ (0, 10), (20, 100) ] 
size = 5 
N = 100 

arrays = [ ] 
for n in range(N): 
    one_array = [] 
    for r in ranges: 
     chunk = np.random.randint(*r, size=size) 
     one_array.append(chunk) 
    arrays.append(one_array) 

Es könnte einen nennenswerten Unterschied machen numpy des append anstelle von Python zu verwenden, aber ich habe das es leichter lesbar machen auf diese Weise geschrieben (und :) zu schreiben).

Verwandte Themen