前段时间,我使用了类似seq的工具将一系列伪随机生成的数字打印到stdout。您可以指定范围,种子,样本数量等等。
我只是忘记了此工具的名称。谁能帮我吗?
也许您甚至知道更高级的工具,例如,它支持不同的概率分布,甚至支持生成不同字母和长度/字符分布下的随机单词序列。
前段时间,我使用了类似seq的工具将一系列伪随机生成的数字打印到stdout。您可以指定范围,种子,样本数量等等。
我只是忘记了此工具的名称。谁能帮我吗?
也许您甚至知道更高级的工具,例如,它支持不同的概率分布,甚至支持生成不同字母和长度/字符分布下的随机单词序列。
Answers:
你是说记吗?
$ 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
再见
如果您不介意编写一个小的脚本来完成所需的工作,则建议您在开源统计系统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解决问题。试一试。
jot
在上述答案中添加了有关模仿lcpriani 命令的信息。至于的极限值rnorm()
,这不是正态分布的工作方式。如果采用0的默认均值和1的SD,则1000仍然是可能的返回值,这极不可能。R让您写一些可以钳制值以除去给定范围内的值的东西,但是您可能会滥用正态分布。