2016-08-01 38 views
0

Derzeit Python zu lernen und sehr neu für Numpy & PandaStudent - np.random.choice: Wie zu isolieren und Tally treffen Frequenz innerhalb eines np.random.choice Bereich

Ich habe zusammen einen Zufallsgenerator mit einer Reihe pieced . Es verwendet Numpy und ich bin nicht in der Lage, jedes einzelne Ergebnis zu isolieren, um die Iterationen in einem Bereich innerhalb des Zufallsbereichs zu zählen.

Ziel: Zählen Sie die Iterationen von "Random> = 1000" und fügen Sie dann 1 zur entsprechenden Zelle hinzu, die mit der Anzahl der Iterationen korreliert. Beispiel in sehr grundlegenden Sinn:

#Random generator begins... these are first four random generations 
Randomiteration0 = 175994 (Random >= 1000) 
Randomiteration1 = 1199 (Random >= 1000) 
Randomiteration2 = 873399 (Random >= 1000) 
Randomiteration3 = 322 (Random < 1000) 

#used to +1 to the fourth row of column A in CSV 
finalIterationTally = 4 

#total times random < 1000 throughout entire session. Placed in cell B1 
hits = 1 
#Rinse and repeat to custom set generations quantity... 

(Die Logik würde dann in der Tabelle auf +1 bis A4 werden, wenn die Iteration tally 7 gewesen wäre, dann +1 auf die A7 usw. im Wesentlichen Also, ich. bin der Abstand und die Frequenz dieses Abstandes zwischen jedem "Schlag" messend

Mein gegenwärtiger Code schließt einen CSV-Exportteil ein. Ich muss nicht jedes einzelne zufällige Ergebnis mehr exportieren. Ich muss nur die Häufigkeit jedes Iterationsabstandes zwischen jedem Treffer exportieren. Dies ist, wo ich ratlos bin.

Prost

import pandas as pd 
import numpy as np 

#set random generation quantity 
generations=int(input("How many generations?\n###:")) 

#random range and generator 
choices = range(1, 100000) 
samples = np.random.choice(choices, size=generations) 

#create new column in excel 
my_break = 1000000 
if generations > my_break: 
    n_empty = my_break - generations % my_break 
    samples = np.append(samples, [np.nan] * n_empty).reshape((-1, my_break)).T 

#export results to CSV 
(pd.DataFrame(samples) 
.to_csv('eval_test.csv', index=False, header=False)) 

#left uncommented if wanting to test 10 generations or so 
print (samples) 

Antwort

0

Ich glaube, Sie Iterationen und Generationen vermischen. Es klingt, als ob Sie 4 Iterationen für N Generationen wünschen, aber Ihr unterstes Stück Code drückt die "4" nirgends aus. Wenn Sie alle Variablen an den Anfang Ihres Skripts ziehen, können Sie damit besser organisieren. Panda eignet sich hervorragend zum Parsen von komplizierten CSVs, aber für diesen Fall brauchen Sie es nicht wirklich. Sie brauchen wahrscheinlich nicht einmal numpig.

import numpy as np 

THRESHOLD = 1000 
CHOICES = 10000 
ITERATIONS = 4 
GENERATIONS = 100 

choices = range(1, CHOICES) 

output = np.zeros(ITERATIONS+1) 

for _ in range(GENERATIONS): 
    samples = np.random.choice(choices, size=ITERATIONS) 
    count = sum([1 for x in samples if x > THRESHOLD]) 
    output[count] += 1 

output = map(str, map(int, output.tolist())) 

with open('eval_test.csv', 'w') as f: 
    f.write(",".join(output)+'\n')