2016-05-26 5 views
1

Plotten Ich versuche, die Verteilungen der verschiedenen Randomisierung Funktionen aussehen wie in Xcode zu untersuchen, was, so habe ich diesen Spielplatz:richtig ein Array in Xcode 7.3.1 Spielplätze

import UIKit 
import XCPlayground 

var distribution: [Int] = Array(count: 6, repeatedValue: 0) 
for i in 1...100000 { 
    let randomNumber = arc4random_uniform(6) 
    distribution[Int(randomNumber)] += 1 
    XCPlaygroundPage.currentPage.captureValue(distribution[Int(randomNumber)], withIdentifier: "Random Distribution") 
} 

Was ich hatte gehofft, war zu sehen, eine Linie entlang der Unterseite des Diagramms, die eine normale (oder flache) Verteilung zeigt, aber stattdessen habe ich diese diagonale Linie. Wie bekomme ich es, um Level zu sein?

+1

sehe ich die seltsame Artefakte nur wurde Fixierung, die in dem Code erscheint, wenn Sie mich es zu schlagen lol. Danke, @Eric –

Antwort

2

Sie Werte sind erfassen, wie Sie sie sind zu sammeln, wollen Sie Endwerte statt:

for i in 0..<6 { 
    XCPlaygroundPage.currentPage.captureValue(distribution[i], withIdentifier: "Distribution") 
} 
+0

Ich glaube, es ist die Lösung; aber Xcode erweitert das Diagrammergebnis automatisch vertikal, um den gesamten für Sie gleichen Platz einzunehmen? Zuerst zeigt es die flache Linie und dann das Ergebnis auf der Y-Achse. Ich weiß nicht, ob wir es anders machen können. – Moritz

+0

@EricD das könnte Sinn machen, außer dass das Array etwas wie [1650, 1705, 1704, 1698, 1651, 1592] aussieht, und was ich eigentlich begehre, ist nur ein Graph mit 6 Werten, (das ist, dass ich schaue auf die Verteilung der Auswahlmöglichkeiten zwischen 6 Zahlen.) Wenn ich einen Bereich von 100 Zahlen durch 10K Iterationen machen würde, würde ich eher eine normale Kurve oder eine flache Kurve bekommen, abhängig davon, welche zufällige Quelle ich benutzt habe, aber trotzdem ' Ich bin mir nicht sicher, ob der Graph, den ich mir ansehe, 6 Punkte hat. es sieht eher aus wie 10000 ... –

0

Ok ich fummelte herum, und das funktioniert sehr gut.

var distribution: [Int] = Array(count: 6, repeatedValue: 0) 
let distributionSource = GKARC4RandomSource() 
distributionSource.dropValuesWithCount(1024) 
for i in 1...10000 { 
    let randomNumber = distributionSource.nextIntWithUpperBound(6) 
    distribution[Int(randomNumber)] += 1 
} 
for value in distribution { 
XCPlaygroundPage.currentPage.captureValue(value, withIdentifier: "Random Distribution") 
} 

jetzt kann ich die Zahlen verändern und meine Kurven :-)

+0

Jetzt muss ich nur wissen, was XCPlaygroundPage.currentPage.captureValue (Wert, withIdentifier :) nach Xcode 7.3.1 ersetzt hat –

+0

Schön, und schnell! :) // Ich denke, dass captureValue veraltet ist, weil sie die Inline-Graphen bevorzugen. Dazu geben Sie einfach den zu untersuchenden Wert in einer Schleife an und klicken auf das + -Zeichen rechts. [Siehe meinen Screenshot.] (Https://www.evernote.com/l/AFmM3poWESBESovQfM1PugbDMwCwdeyBAGI) – Moritz

+0

Oh @eric, das ist eine große Verbesserung! Ich wünsche mir, dass Xcode in jedem Fall der Abneigung die neue Alternative anbietet. –