【发布时间】:2017-05-15 18:38:02
【问题描述】:
给定一长串以毫秒为单位的延迟,我想从中计算百分位数。我得到了下面的方法,但我不确定如何验证这是否给了我准确的结果?
public static long[] percentiles(long[] latencies, double... percentiles) {
Arrays.sort(latencies, 0, latencies.length);
long[] values = new long[percentiles.length];
for (int i = 0; i < percentiles.length; i++) {
int index = (int) (percentiles[i] * latencies.length);
values[i] = latencies[index];
}
return values;
}
我想从latencies 数组中获取第 50、95、99 和 99.9 个百分位数。
long[] percs = percentiles(latencies, 0.5, 0.95, 0.99, 0.999);
在给定大量延迟的情况下,这是获得百分位数的正确方法吗?我正在使用 Java 7。
【问题讨论】:
-
请注意,您的
percentiles方法不仅计算百分位值(并不总是正确 - 请参阅我的答案)并返回值,它还使latencies数组排序,这是一个可能不希望出现的副作用。这在您尝试编写的小程序中可能是无害的,但一般来说,如果方法具有不是该方法目的的副作用,则不是一个好习惯。
标签: java math statistics apache-commons percentile