gpt4 book ai didi

r - 随机的矢量化并行选择?

转载 作者:行者123 更新时间:2023-12-01 10:52:10 25 4
gpt4 key购买 nike

我有两个具有 200 个数值的向量“H”和“L”。我想创建一个名为“HL”的第三个向量,其中包含来自 H 和 L 的 200 个随机样本。但是,我希望它们是并行选择的,就像 pmin 和 pmax 函数一样。

简化示例:

H <- 1:5
L <- 6:10

# rbind(H,L)
# [,1] [,2] [,3] [,4] [,5]
# H 1 2 3 4 5
# L 6 7 8 9 10
# intended result is then a random pick from each 'column' shown above, e.g:

HL <- c(6,2,8,4,10)

有没有不用循环的方法?

任何建议将不胜感激谢谢

最佳答案

您只需要来自伯努利(即 0 或 1)分布的 N 个样本,其中 N是 H/L 中值的数量。然后,您使用采样分别从 H 或 L 中挑选。使用 ifelse确保您需要的“平行选择”。

set.seed(1)
N <- length(H)
HorL <- rbinom(N, 1, 0.5)

# the select
results <- ifelse(HorL, H, L)

results
# [1] 6 7 3 4 10

这一切都包含在一个漂亮的衬垫中:

ifelse( rbinom(H, 1, 0.5), H, L)

来自@Arun:一种(相对)更快的实现方式(不需要 ifelse )是:

idx <- which(!as.logical(rbinom(H, 1, 0.5)))
vv <- H
vv[idx] <- L[idx]

说明

@Gabriel,这个想法是您从两个选项中选择一个。您可以有效地抛硬币,如果正面朝上,则从 H 中选择,如果反面,则从 L 中选择。这是伯努利分布,更一般的形式是二项式分布。 R 有一种工具可以提供这种方式的随机数。

因此我们向 R 请求 N其中许多,然后相应地从 H 或 L 中选择。

“select from ..”部分是 R诡计。

  • 注意我们可以想到0, 1作为TRUE, FALSEA, B

  • 使用 ifelse方法应该是不言自明的。如果为真,则从一个来源中选择,如果为假,则从另一个来源中选择。

Arun 的方法更有创意。他的方法使用相同的“掷硬币”机制在集合之间进行选择,但具有速度优势。 (我们说的是纳秒,但仍然如此)。他的方法基本上是这样说的:

  • 从一组开始,比如 H。
  • 抛硬币。
  • 每当硬币出现反面时,将 H 的那个元素替换为 L 的相同索引元素。(请注意,“相同索引”方面就是您所说的“并行选择”)

关于r - 随机的矢量化并行选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17778369/

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