给定一个带有N
实数的数字向量,采样值的最快方法是什么k
,这样更高的值就有更大的被选中的概率?
数学上
prob(X) > prob(Y) when X > Y (Linearly)
当所有条目都是正数时,这很容易sample()
,只需使用prob
arg:
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)
谢谢。