Стохастична версія послідовності для генерації послідовності випадкових чисел / слів?


10

Деякий час тому я використовував seq-подібний інструмент для друку послідовності псевдо випадкових згенерованих чисел для stdout. Ви можете вказати діапазон, насіння та кількість проб та багато іншого.

Я щойно забув назву цього інструменту. Хтось може мені допомогти?

Можливо, ви знаєте навіть більш просунутий інструмент, який, наприклад, підтримує різні розподіли ймовірностей або навіть генерацію послідовності випадкових слів під різними алфавітами та розподілом за довжиною / символами.

Відповіді:


11

Ви маєте на увазі йоту?

$ 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

Якщо ви використовуєте Ubuntu, пакет є athena-jot. Простий приклад:

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

До побачення.


так, Jot це була команда, дякую! Ще раз, я вдячний для подальших пропозицій щодо вдосконалених інструментів генерації послідовностей.
maxschlepzig

2

Якщо ви не проти написати маленький сценарій, щоб виконати те, що вам потрібно, я рекомендую зробити це в R , відкритій статистичній системі.

Наприклад, розгляньте цей однолінійний список, щоб отримати список зі 100 розподілених гауссівських номерів:

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

Розберемо це.

Стандартна Rкоманда приводить вас у інтерактивне програмування, що добре, якщо ви намагаєтеся розробити, як щось зробити вручну або будуєте щось поступово, але з вашого питання це здається, що вам просто потрібен список номерів відправити в іншу програму. Тому замість цього ми використовуємо Rscript, який більше схожий на традиційний інтерпретатор скриптів Unix: ви можете передавати йому ім'я файлу, що містить R-скрипт, або використовувати стандартний -eпрапор, щоб передати весь текст програми в командному рядку.

rnorm()є функцією R для отримання списку випадкових чисел із "нормальним" або гауссовим розподілом. Це займає до трьох параметрів, лише перший з яких потрібно, скільки цифр ви хочете. Ми попросили 100. Взявши за замовчуванням для двох інших необов’язкових параметрів, ми отримуємо середнє значення 0 і стандартне відхилення 1.

Арифметика після цього просто показує класну особливість мови R: ви можете робити арифметику на цілих таблицях даних, матриць тощо, так само легко, як і скалярне значення на більш типовій мові. Я помножив усі створені значення на 100 і додав до них 100, просто тому, що можу. Оскільки R є повноцінною мовою програмування, обмежень у тому, що ви могли зробити з цим списком чисел, немає. Це перевага використання такої системи замість команди з фіксованим призначенням, як jot.

Ми передаємо результат цієї попередньої операції write()функції, яка записує дані у файл за замовчуванням, але ми перекрили це, передаючи порожній рядок для другого параметра, ім'я файлу, тому він записує таблицю в натомість термінал. Наступний параметр, 1якраз і говорить про те, що ми хочемо, щоб наш вихід був у форматі однієї колонки.

R має багато інших функцій генерації випадкових чисел, вбудованих у базову систему. Наприклад, ми можемо імітувати jotкоманду у відповіді lcpriani за допомогою цього сценарію:

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

Тут ми використовуємо runif()для отримання 10 рівномірно розподілених випадкових чисел від 12 до 27. Як і rnorm(), яку ми використовували вище, ця функція повертає значення з плаваючою комою, тому ми маємо round()їх до їх найближчих цілих значень, перш ніж записувати їх на екран.

R також має багатий набір доповнень у CRAN , сховище пакетів, модельоване на CPAN Perl. Одне, що може вас зацікавити, називається просто випадковим , який виступає інтерфейсом до random.org , сервісу, який повертає справжні випадкові числа, породжені атмосферним шумом.

R - це повне середовище програмування, тому, можливо, вам фактично не потрібно виводити свої цифри з R у текстовому форматі. Можливо, ви зможете повністю вирішити свою проблему в Р. Спробуйте.


Який R спосіб отримати x випадкових чисел із заданого інтервалу? Наприклад, 100 випадкових чисел між 10 і 200 (наприклад, від звичайного розподілу)?
maxschlepzig

jotДо вищезгаданої відповіді я додав інформацію про імітацію команди lcpriani . Що стосується обмеження значень для rnorm(), то нормальний розподіл не працює. Якщо взяти середнє значення за замовчуванням 0 і SD 1, то 1000 як і раніше можливе повернене значення, це просто малоймовірно. R дозволив би вам написати щось, що зафіксувало б значення, щоб видалити речі поза заданим діапазоном, але тоді ви, мабуть, неправильно використовуєте звичайний розподіл.
Warren Young
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.