Versi stokastik seq untuk menghasilkan urutan angka / kata acak?

10

Beberapa waktu lalu saya menggunakan alat seq-like untuk mencetak urutan nomor acak pseudo yang dihasilkan ke stdout. Anda bisa menentukan rentang, benih, dan jumlah sampel dan banyak lagi.

Saya baru saja lupa nama alat ini. Adakah yang bisa membantu saya?

Mungkin Anda tahu bahkan alat yang lebih maju yang, misalnya, mendukung distribusi probabilitas yang berbeda atau bahkan pembuatan urutan kata-kata acak di bawah berbagai huruf dan distribusi panjang / karakter.

maxschlepzig
sumber

Jawaban:

11

Apakah maksud Anda menulis?

$ 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

Jika Anda menggunakan Ubuntu paketnya adalah athena-jot. Contoh sederhana:

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

Sampai jumpa.

lcipriani
sumber
ya, iota adalah perintah itu, terima kasih! Sekali lagi, saya menghargai saran lebih lanjut dari alat penghasil urutan yang lebih maju.
maxschlepzig
2

Jika Anda tidak keberatan menulis skrip kecil untuk melakukan apa yang Anda butuhkan, saya sarankan melakukannya di R , sistem statistik open-source.

Misalnya, pertimbangkan one-liner ini untuk mendapatkan daftar 100 nomor yang didistribusikan Gaussian:

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

Mari kita hancurkan ini.

RPerintah standar membawa Anda ke lingkungan pemrograman interaktif, yang baik-baik saja jika Anda mencoba mencari cara untuk melakukan sesuatu dengan tangan atau membangun sesuatu secara bertahap, tetapi dari pertanyaan Anda, sepertinya Anda hanya perlu daftar angka untuk mengirim ke program lain. Jadi alih-alih, kami menggunakan Rscript, yang berperilaku lebih seperti juru bahasa skrip Unix tradisional: Anda dapat memberikannya nama file yang berisi skrip R, atau menggunakan -ebendera standar untuk meneruskan seluruh teks program pada baris perintah.

rnorm()adalah fungsi R untuk mendapatkan daftar angka acak dengan distribusi "normal" atau Gaussian. Dibutuhkan hingga tiga parameter, hanya yang pertama diperlukan, berapa angka yang Anda inginkan. Kami telah meminta 100. Dengan mengambil default untuk dua parameter opsional lainnya, kami mendapatkan rata-rata 0 dan standar deviasi 1.

Aritmatika setelah itu hanya memamerkan fitur keren dari bahasa R: Anda dapat melakukan aritmatika pada seluruh tabel data, matriks, dll., Semudah nilai skalar dalam bahasa yang lebih khas. Saya telah mengalikan semua nilai yang dihasilkan dengan 100 dan menambahkan 100 ke mereka, hanya karena saya bisa. Karena R adalah bahasa pemrograman lengkap, tidak ada batasan untuk hal-hal yang dapat Anda lakukan dengan daftar angka ini. Itulah keuntungan menggunakan sistem seperti itu daripada perintah dengan tujuan tetap seperti jot.

Kami meneruskan hasil operasi sebelumnya ke write()fungsi, yang menulis data ke file secara default, tetapi kami telah menimpanya dengan melewatkan string kosong untuk parameter kedua, nama file, sehingga ia menulis tabel untuk terminal sebagai gantinya. Parameter berikutnya,, 1katakan saja kita ingin output kita dalam format satu kolom.

R memiliki banyak fungsi pembangkitan angka acak lainnya yang dibangun ke dalam sistem basis. Sebagai contoh, kita dapat meniru jotperintah dalam jawaban lcpriani dengan skrip ini:

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

Di sini kita menggunakan runif()untuk mendapatkan 10 angka acak yang terdistribusi secara merata dari 12 hingga 27. Seperti rnorm(), yang kita gunakan di atas, fungsi ini mengembalikan nilai titik-mengambang, jadi kita harus round()memasukkannya ke nilai integer terdekat sebelum menuliskannya di layar.

R juga memiliki serangkaian add-on yang kaya di CRAN , repositori paket yang dimodelkan pada CPAN Perl. Salah satu yang Anda mungkin tertarik hanya disebut acak , yang bertindak sebagai antarmuka ke random.org , layanan yang mengembalikan nomor acak benar yang dihasilkan dari kebisingan atmosfer.

R adalah lingkungan pemrograman yang lengkap, jadi mungkin Anda sebenarnya tidak perlu mengeluarkan angka dari R dalam format teks. Anda mungkin dapat menyelesaikan masalah Anda sepenuhnya dalam R. Cobalah.

Warren Young
sumber
Apa cara R untuk mendapatkan x angka acak dari interval yang diberikan? Misalnya 100 angka acak antara 10 dan 200 (mis. Dari distribusi normal)?
maxschlepzig
Saya menambahkan info tentang meniru jotperintah lcpriani pada jawaban di atas. Adapun untuk membatasi nilai rnorm(), itu bukan cara distribusi normal bekerja. Jika Anda mengambil rata-rata default 0 dan SD 1, maka 1000 masih merupakan nilai pengembalian yang mungkin, itu hanya sangat tidak mungkin. R akan membiarkan Anda menulis sesuatu yang akan menjepit nilai-nilai untuk menghapus hal-hal di luar rentang yang diberikan, tetapi kemudian Anda mungkin akan menyalahgunakan distribusi normal.
Warren Young