gpt4 book ai didi

r - R中的 'rexp(1000, 1)'和 'replicate(1000, rexp(1,1))'有什么区别?

转载 作者:行者123 更新时间:2023-12-03 07:57:54 25 4
gpt4 key购买 nike

我正在尝试使用参数为 1 的指数分布生成 1000 个数字。

将种子值设置为 1 后,我尝试了 rexp(1000, 1)replicate(1000, rexp(1, 1)),但中位数结果两个向量的不同。

我预计这两个表达式生成的向量是相同的,因为它们都是在相同的种子值下从相同的指数分布中采样的。

rexp(1000, 1)replicate(1000, rexp(1, 1)) 之间有什么区别?在实践中我应该使用哪个?

这是我尝试过的代码:

> options(digits = 2)  
> set.seed(1)
>
> a <- rexp(1000, 1)
> b <- replicate(1000, rexp(1, 1))
>
> median(a)
[1] 0.73
> median(b)
[1] 0.68

最佳答案

这里的问题是随机种子在使用后会发生变化,因此当您生成b时,您的种子1是不同的。如果您希望它与 a 相同,则必须在创建 b 之前重置种子

set.seed(1)

a <- rexp(1000, 1)

set.seed(1)

b <- replicate(1000, rexp(1, 1))

median(a)
#> [1] 0.7346113

median(b)
#> [1] 0.7346113

至于您应该使用哪个,它肯定是 rexp(1000, 1),因为这会生成对底层 C 代码的单个调用,而不是 1000 个调用。虽然我们从上面可以看到这两个代码生成相同的结果,但一个简单的基准测试表明 rexp 大约快 50 倍。

microbenchmark::microbenchmark(a = rexp(1000, 1), 
b = replicate(1000, rexp(1, 1)))
#> Unit: microseconds
#> expr min lq mean median uq max neval cld
#> a 32.501 33.5005 34.54794 34.101 34.701 42.301 100 a
#> b 1503.402 1539.0010 2043.20113 1569.451 1646.901 10051.202 100 b

创建于 2023 年 2 月 27 日 reprex v2.0.2

关于r - R中的 'rexp(1000, 1)'和 'replicate(1000, rexp(1,1))'有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75579914/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com