Stochastyczna wersja seq do generowania sekwencji liczb losowych / słów?

10

Jakiś czas temu użyłem narzędzia typu sekwencyjnego do wypisania sekwencji standardowych liczb pseudolosowych na standardowe wyjście. Możesz podać zakres, ziarno, liczbę próbek i wiele więcej.

Właśnie zapomniałem nazwy tego narzędzia. Czy ktoś może mi pomóc?

Być może znasz jeszcze bardziej zaawansowane narzędzie, które na przykład obsługuje różne rozkłady prawdopodobieństwa lub nawet generowanie sekwencji losowych słów pod różnymi alfabetami i rozkładami długości / znaków.

maxschlepzig
źródło

Odpowiedzi:

11

Masz na myśli 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

Jeśli używasz Ubuntu, pakiet to athena-jot. Prosty przykład:

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

PA.

lcipriani
źródło
tak, jot był tym poleceniem, dzięki! Ponownie doceniam dalsze sugestie dotyczące bardziej zaawansowanych narzędzi do generowania sekwencji.
maxschlepzig
2

Jeśli nie masz nic przeciwko napisaniu małego skryptu, aby zrobić to, czego potrzebujesz, polecam to zrobić w R , systemie statystyk open source.

Rozważmy na przykład ten linijkę, aby uzyskać listę 100 liczb rozkładów Gaussa:

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

Rozwalmy to.

Standardowe Rpolecenie przenosi Cię do interaktywnego środowiska programowania, co jest w porządku, jeśli próbujesz dowiedzieć się, jak zrobić coś ręcznie lub budujesz coś stopniowo, ale z twojego pytania brzmi, jakbyś potrzebował tylko listy liczb wysłać do innego programu. Zamiast tego używamy Rscript, który zachowuje się bardziej jak tradycyjny interpreter skryptów uniksowych: możesz przekazać mu nazwę pliku zawierającego skrypt R lub użyć standardowej -eflagi, aby przekazać cały tekst programu w wierszu poleceń.

rnorm()jest funkcją R, aby uzyskać listę liczb losowych o rozkładzie „normalnym” lub Gaussa. Zajmuje do trzech parametrów, z których tylko pierwszy jest wymagany, ile liczb chcesz. Poprosiliśmy o 100. Biorąc wartości domyślne dla pozostałych dwóch opcjonalnych parametrów, otrzymujemy średnią 0 i odchylenie standardowe 1.

Arytmetyka po prostu pokazuje fajną funkcję języka R: możesz wykonywać arytmetykę na całych tabelach danych, macierzach itp., Równie łatwo jak wartość skalarną w bardziej typowym języku. Pomnożyłem wszystkie wygenerowane wartości przez 100 i dodałem do nich 100, tylko dlatego, że mogę. Ponieważ R jest pełnoprawnym językiem programowania, nie ma ograniczeń co do tego, co możesz zrobić z tą listą liczb. To zaleta korzystania z takiego systemu zamiast polecenia o ustalonym celu, takiego jak jot.

Wynik tej poprzedniej operacji przekazujemy do write()funkcji, która domyślnie zapisuje dane do pliku, ale przesłoniliśmy to, przekazując pusty łańcuch drugiego parametru, nazwy pliku, więc zapisuje tabelę do zamiast tego terminal. Następny parametr, 1po prostu mówi mu, że chcemy, aby nasze dane wyjściowe były w formacie jednokolumnowym.

R ma wiele innych funkcji generowania liczb losowych wbudowanych w system podstawowy. Na przykład możemy naśladować jotpolecenie w odpowiedzi lcpriani za pomocą tego skryptu:

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

W tym przypadku używamy runif()do uzyskania 10 równomiernie rozmieszczonych liczb losowych od 12 do 27. Podobnie rnorm(), jak użyliśmy powyżej, funkcja zwraca wartości zmiennoprzecinkowe, więc musimy round()zapisać je do najbliższej liczby całkowitej przed zapisaniem ich na ekranie.

R ma również bogaty zestaw dodatków w CRAN , repozytorium pakietów wzorowanym na CPAN Perla. Jednym, który może Cię zainteresować, jest po prostu nazywany random , który działa jako interfejs do random.org , usługi zwracającej prawdziwe liczby losowe generowane z hałasu atmosferycznego.

R jest kompletnym środowiskiem programistycznym, więc może się okazać, że tak naprawdę nie musisz wyciągać liczb z R w formacie tekstowym. Możesz być w stanie rozwiązać swój problem całkowicie w R. Daj mu szansę.

Warren Young
źródło
Jaki jest sposób R, aby uzyskać x liczb losowych z danego przedziału? Np. 100 liczb losowych od 10 do 200 (np. Z rozkładu normalnego)?
maxschlepzig
Do jotpowyższej odpowiedzi dodałem informacje o naśladowaniu polecenia lcpriani . Jeśli chodzi o wartości graniczne rnorm(), nie działa to w taki sposób, jak rozkład normalny. Jeśli weźmiesz domyślną średnią 0 i SD 1, to 1000 jest wciąż możliwą wartością zwrotną, jest to po prostu bardzo mało prawdopodobne. R pozwoli ci napisać coś, co zablokuje wartości, aby usunąć rzeczy poza podanym zakresem, ale wtedy prawdopodobnie niewłaściwie użyjesz rozkładu normalnego.
Warren Young,