来自未缩放的100万个数字列表的加权随机样本

时间:2017-10-11 13:09:27

标签: python numpy

我有一个numpy形状的数组(1e6,1),我想根据最大的值来加权样本。但是,很难将列表缩放为浮点数所需精度的一个b / c。

以下是我可以使用随机数创建的示例(在我的情况下,数字不是随机的)

import numpy as np
A = np.random.rand(1000000)
probs = A / np.sum(A)
sample = np.random.choice(A, p=probs)
# fails b/c probs don't sum to one

1 个答案:

答案 0 :(得分:2)

我写过函数来做同样的事情;可悲的是,我现在无法找到它们。

关键是首先要对阵列进行攻击;从最小到最大排序后,求和是稳定的;然后,您可以从已排序的数组中创建累积分布,从中均匀地进行采样,并使用argsort的结果映射回原始元素。

这完全消除了我的任何数值稳定性问题。

相关问题