Stochastische Version von seq zum Erzeugen einer Folge von Zufallszahlen / Wörtern?

10

Vor einiger Zeit habe ich ein seq-ähnliches Werkzeug verwendet, um eine Folge von pseudozufällig generierten Zahlen auf stdout zu drucken. Sie können einen Bereich, einen Startwert, die Anzahl der Proben und vieles mehr angeben.

Ich habe gerade den Namen dieses Tools vergessen. Kann mir jemand helfen?

Vielleicht kennen Sie sogar ein fortgeschritteneres Tool, das beispielsweise unterschiedliche Wahrscheinlichkeitsverteilungen oder sogar die Erzeugung einer Folge zufälliger Wörter unter verschiedenen Alphabeten und Längen- / Zeichenverteilungen unterstützt.

maxschlepzig
quelle

Antworten:

11

Meinst du jot?

$ jot 
jot: jot - print sequential or random data
usage:  jot [ options ] [ reps [ begin [ end [ s ] ] ] ]
Options:
    -r      random data
    -c      character data
    -n      no final newline
    -b word     repeated word
    -w word     context word
    -s string   data separator
    -p precision    number of characters

Wenn Sie Ubuntu verwenden, ist das Paket athena-jot. Ein einfaches Beispiel:

$ jot -r 10 12 27
26
13
22
18
25
12
13
23
15
23

Tschüss.

lcipriani
quelle
ja, Jota war das Kommando, danke! Auch hier freue ich mich über weitere Vorschläge für erweiterte Tools zur Sequenzgenerierung.
Maxschlepzig
2

Wenn es Ihnen nichts ausmacht, ein kleines Skript zu schreiben, um das zu tun, was Sie brauchen, würde ich empfehlen, es in R , dem Open-Source-Statistiksystem, zu tun .

Betrachten Sie beispielsweise diesen Einzeiler, um eine Liste von 100 Gauß-verteilten Zahlen zu erhalten:

$ Rscript -e 'write(rnorm(100) * 100 + 100, "", 1)'
234.2903
-25.53289
168.0262
-28.49810
105.0687
85.97355
269.5072
...

Lassen Sie uns das zusammenfassen.

Der Standardbefehl Rbringt Sie in eine interaktive Programmierumgebung. Dies ist in Ordnung, wenn Sie versuchen, etwas von Hand zu tun oder schrittweise aufzubauen. Aus Ihrer Frage geht jedoch hervor, dass Sie nur eine Liste von Zahlen benötigen an ein anderes Programm senden. Stattdessen verwenden wir Rscript, das sich eher wie ein herkömmlicher Unix-Skriptinterpreter verhält: Sie können ihm den Namen einer Datei übergeben, die ein R-Skript enthält, oder das Standardflag -everwenden, um den gesamten Programmtext in der Befehlszeile zu übergeben.

rnorm()ist die R-Funktion, um eine Liste von Zufallszahlen mit der "normalen" oder Gaußschen Verteilung zu erhalten. Es werden bis zu drei Parameter benötigt, von denen nur der erste erforderlich ist, wie viele Zahlen Sie möchten. Wir haben nach 100 gefragt. Wenn wir die Standardeinstellungen für die beiden anderen optionalen Parameter übernehmen, erhalten wir einen Mittelwert von 0 und eine Standardabweichung von 1.

Die Arithmetik danach zeigt nur eine coole Funktion der R-Sprache: Sie können Arithmetik für ganze Datentabellen, Matrizen usw. genauso einfach ausführen wie einen Skalarwert in einer typischeren Sprache. Ich habe alle generierten Werte mit 100 multipliziert und 100 hinzugefügt, nur weil ich kann. Da R eine vollwertige Programmiersprache ist, gibt es keine Begrenzung für die Dinge, die Sie mit dieser Liste von Zahlen tun können. Das ist der Vorteil der Verwendung eines solchen Systems anstelle eines Befehls mit festem Zweck wie jot.

Wir übergeben das Ergebnis dieser vorherigen Operation an die write()Funktion, die die Daten standardmäßig in eine Datei schreibt. Wir haben dies jedoch überschrieben, indem wir eine leere Zeichenfolge für den zweiten Parameter, den Dateinamen, übergeben, sodass die Tabelle in geschrieben wird das Terminal stattdessen. Der nächste Parameter 1sagt nur, dass wir unsere Ausgabe im einspaltigen Format wünschen.

R verfügt über viele andere Funktionen zur Erzeugung von Zufallszahlen, die in das Basissystem integriert sind. Zum Beispiel können wir den jotBefehl in lcprianis Antwort mit diesem Skript nachahmen :

$ Rscript -e 'write(round(runif(10, 12, 27)), "", 1)'

Hier verwenden wir runif(), um 10 gleichmäßig verteilte Zufallszahlen von 12 bis 27 zu erhalten. Wie rnorm()oben verwendet, gibt diese Funktion Gleitkommawerte zurück, sodass wir round()sie auf ihre nächsten ganzzahligen Werte setzen müssen, bevor wir sie auf den Bildschirm schreiben.

R verfügt außerdem über eine Reihe von Add-Ons in CRAN , einem Paket-Repository, das dem CPAN von Perl nachempfunden ist. Eine, die Sie interessieren könnte, heißt einfach random und fungiert als Schnittstelle zu random.org , einem Dienst, der echte Zufallszahlen zurückgibt, die aus atmosphärischem Rauschen generiert werden.

R ist eine vollständige Programmierumgebung, daher müssen Sie Ihre Zahlen möglicherweise nicht im Textformat aus R herausholen. Möglicherweise können Sie Ihr Problem vollständig in R lösen. Probieren Sie es aus.

Warren Young
quelle
Was ist der R-Weg, um x Zufallszahlen aus einem bestimmten Intervall zu erhalten? ZB 100 Zufallszahlen zwischen 10 und 200 (zB aus der Normalverteilung)?
Maxschlepzig
Ich habe jotder obigen Antwort Informationen zur Nachahmung des Befehls von lcpriani hinzugefügt . Bei den Grenzwerten für rnorm()funktioniert die Normalverteilung nicht so. Wenn Sie den Standardmittelwert von 0 und die SD von 1 verwenden, ist 1000 immer noch ein möglicher Rückgabewert. Dies ist nur äußerst unwahrscheinlich. Mit R können Sie etwas schreiben, das die Werte festklemmt, um Dinge außerhalb eines bestimmten Bereichs zu entfernen, aber dann würden Sie wahrscheinlich die Normalverteilung missbrauchen.
Warren Young