Стохастическая версия seq для генерации последовательности случайных чисел / слов?

10

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

Я только что забыл название этого инструмента. Может кто-нибудь мне помочь?

Возможно, вы знаете даже более продвинутый инструмент, который, например, поддерживает различные распределения вероятностей или даже генерацию последовательности случайных слов в разных алфавитах и ​​длинах / символах.

maxschlepzig
источник

Ответы:

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

До свидания.

lcipriani
источник
да, йота было то , что команда, спасибо! Еще раз, я ценю дальнейшие предложения о более продвинутых инструментах генерации последовательности.
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. Дайте ей шанс.

Уоррен Янг
источник
Как R способ получить х случайных чисел из заданного интервала? Например, 100 случайных чисел от 10 до 200 (например, из нормального распределения)?
maxschlepzig
Я добавил информацию о копировании jotкоманды lcpriani в ответ выше. Что касается ограничения значений для rnorm(), это не так, как нормальное распределение работает. Если вы возьмете значение по умолчанию 0, а SD - 1, тогда 1000 все еще будет возможным возвращаемым значением, это просто невероятно. R позволил бы вам написать что-то, что фиксировало бы значения, чтобы удалить вещи вне заданного диапазона, но тогда вы, вероятно, неправильно использовали бы нормальное распределение.
Уоррен Янг