我需要找到大量数据流的任意分位数(不适合内存),并且结果需要是可重复的,即对于同一个流,结果应该是相同的。为此,我一直在使用 colt,结果不可重复。
是否有另一个图书馆通过这些要求?
我必须做什么才能使分位数分箱的结果可与 colt 重复(我使用的是 1.2.0)?我在随机数中使用了随机种子,但看起来 colt 引入了自己的随机性。我想不通。
对于两次不同的运行,我得到以下结果。如果它们是可重复的,结果将是相同的:
[0.0990242124295947, 0.20014652659912247, 0.2996443961549412]
[0.09994965676310263, 0.20079195488768953, 0.29986981667267676]
这是生成它的代码:
public class QuantileTest {
public static void main(String[] args) throws IOException, Exception {
QuantileBin1D qBins = new QuantileBin1D(false, Long.MAX_VALUE, 0.001, 0.0001, 64, null);
Random rand = new Random(0);
for (int i = 0; i < 1500000; i++) {
double num = rand.nextDouble();;
qBins.add(num);
}
DoubleArrayList qMarks = new DoubleArrayList(new double[] {0.1, 0.2, 0.3});
double[] xMarks = qBins.quantiles(qMarks).elements();
System.out.println(Arrays.toString(xMarks));
}
}