用于生成随机数/单词序列的seq的随机版本?


10

前段时间,我使用了类似seq的工具将一系列伪随机生成的数字打印到stdout。您可以指定范围,种子,样本数量等等。

我只是忘记了此工具的名称。谁能帮我吗?

也许您甚至知道更高级的工具,例如,它支持不同的概率分布,甚至支持生成不同字母和长度/字符分布下的随机单词序列。

Answers:


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

再见


是的,小额是命令,谢谢!再次,我感谢更多高级序列生成工具的建议。
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()用来获取12到27之间的10个均匀分布的随机数。像rnorm()上面使用的一样,该函数返回浮点值,因此在将round()它们写入屏幕之前,必须将它们恢复为最接近的整数值。

R在CRAN中有丰富的插件集,CRAN是一种以Perl的CPAN建模的软件包存储库。您可能会感兴趣的只是简单地称为random,它充当random.org的接口,该服务返回由大气噪声生成的真实随机数。

R是一个完整的编程环境,因此可能实际上不需要以文本格式从R中提取数字。您也许可以完全用R解决问题。试一试。


从给定间隔中获取x个随机数的R方法是什么?例如在10到200之间的100个随机数(例如,根据正态分布)?
maxschlepzig

jot在上述答案中添加了有关模仿lcpriani 命令的信息。至于的极限值rnorm(),这不是正态分布的工作方式。如果采用0的默认均值和1的SD,则1000仍然是可能的返回值,这极不可能。R让您写一些可以钳制值以除去给定范围内的值的东西,但是您可能会滥用正态分布。
沃伦·杨
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.