java - 如何从java数组中获取非随机样本

标签 java arrays random shuffle sample

假设我有一个包含 200 万个 id 的数组。我现在想要检索这些 id 的样本。目前,我使用此问题答案 here 中建议的随机抽样。 。

private static void shuffleScoreArray(ScoreDoc[] ar) {
    Random rnd = new Random();
    for (int i = ar.length - 1; i > 0; i--) {
        int index = rnd.nextInt(i + 1);
        // Simple swap
        ScoreDoc a = ar[index];
        ar[index] = ar[i];
        ar[i] = a;
    }
}

这非常有效,但是我现在如何检索非随机(或多或少分布良好 - 不必 100% 均等)采样?在这种情况下,非随机意味着如果我使用相同的输入数组调用该函数两次,我两次都会得到相同的结果样本。

我刚刚对 SO 和 Google 做了很多研究,但在这种情况下找不到帮助我的方法。大多数 SO 方法似乎都涉及随机采样方法或增加性能步骤。

我可以想象(但不知道是否有效)是你总是使用相同的 Random 对象,但我不确定如何将其按照预期的 java 代码工作。

非常感谢您与我分享的每一个想法和答案。

最佳答案

将种子传递给 RNG。而不是这个:

Random rnd = new Random();

Use this :

Random rnd = new Random(12345l);

对于相同的种子值,来自 RNG 的值将是相同的。

关于java - 如何从java数组中获取非随机样本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29140904/

相关文章:

java - Jhipster 文件导入到 Eclipse 后抛出多个错误

java - 根据表子集的最大值获取行

javascript - Array.from(Object) 和 [...Object] 有什么区别?

c - random() 是什么时候在 C 中引入的?为什么标准 89 不识别它?

java - 什么会导致错误 : Could not find the AndroidManifest. xml 文件?

java - Android操作栏,更改颜色并添加搜索功能

php - 将数组拆分成唯一的对

ios - UIButton 从 Core Data 增加一个数组,从另一个类完成

php - 如何在 PHP 中从 0-X 获取加密强整数?

jquery - 向多个元素添加类