首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >任意长度向量中可重复的随机值

任意长度向量中可重复的随机值
EN

Stack Overflow用户
提问于 2016-12-26 06:28:32
回答 2查看 86关注 0票数 4

我需要生成一个与索引中的每个值相对应的随机数,其中它需要对每个索引值都是可重现的,无论给定多少个索引:

例如,我可能会提供索引1到10,然后在不同的时间调用5到10的索引,它们对于值5到10都需要相同。设置全局种子不会做到这一点,它只会按向量中的位置随机调用的第n项保持相同。

到目前为止,我得到的是这样的,它可以按预期工作:

代码语言:javascript
复制
f = function(ix,min=0,max=1,seed=1){
  sapply(ix,function(x){
    set.seed(seed + x)
    runif(1,min,max)
  })
}
identical(f(1:10)[5:10],f(5:10)) #TRUE
identical(f(1:5),f(5:1)) #FALSE
identical(f(1:5),rev(f(5:1))) #TRUE

我想知道是否有更有效的方法来实现上述目标,而无需为每个索引显式设置种子,作为全局种子的偏移量。

EN

回答 2

Stack Overflow用户

发布于 2018-09-13 23:03:08

您可以使用digest包来执行以下任务:

代码语言:javascript
复制
library(digest)
f = function(ix, seed=1){
  sapply(ix, digest, algo = "sha256", seed = seed)
}
identical(f(1:10)[5:10],f(5:10)) #TRUE
#> [1] TRUE
identical(f(1:5),f(5:1)) #FALSE
#> [1] FALSE
identical(f(1:5),rev(f(5:1))) #TRUE
#> [1] TRUE
票数 1
EN

Stack Overflow用户

发布于 2016-12-26 07:27:13

使用加密。对于给定的键,唯一的输入将始终产生唯一的输出。只要您输入的数字是不同的,那么输出将始终不同;相同的数字将始终加密到传入的输出密文中。对64位数字使用DES,对128位数字使用AES。对于其他大小,要么使用自己的Feistel密码(不安全,但随机),要么使用Hasty Pudding密码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41324962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档