【发布时间】:2013-10-19 18:07:47
【问题描述】:
给定一个具有N 实数的数值向量,对k 值进行采样的最快方法是什么,以便值越高被选中的概率越大?
数学
prob(X) > prob(Y) when X > Y (Linearly)
sample() 当所有条目都是正数时,这很容易,只需使用 prob 参数:
N = 1000
k = 600
x = runif(N, 0, 10)
results = sample(x, k, replace = TRUE, prob = x)
但在我的情况下它不起作用,因为某些值可能是负数。我不能丢弃或忽略负值,这就是问题所在。
那么,最快(代码速度)的方法是什么?显然我知道如何解决这个问题,问题是代码速度 - 我猜一种方法应该比其他方法慢:
1 - Normalize the x vector (a call to `range()` would be necessary + division)
2 - Sum max(x) to x (a call to `max()` then sum)
谢谢。
【问题讨论】:
-
负值应该怎么办?如果您只想忽略它们,可以使用
sample(x[x>0],k,T,prob=x[x>0])。 -
或者只是将它们视为积极的?
prob=abs(x)?我想我不明白这个问题。 -
给定x = c(-10, 0, 10),那么-10被选中的概率较小,10被选中的概率较大。我将进行编辑以更好地解释。
-
为什么投反对票?人们喜欢downvote..为什么?这对 SO 来说很烦人。这个问题得到了很好的编辑和解释,如果你不能或不想提供帮助,那就别管它了。
-
一个使 x 非负数的简单方法是
prob=x+min(x),
标签: r algorithm normalization sample