私は統合テストを実行し、実行時間のリストを返しました。私は平均ではなくその結果セットから90%の分布値を見つける必要があります。これは、ユーザーが90%の時間に遭遇するものを表しているためです。そこにはLinuxコマンドラインがありますか?そうでない場合は、それを行うJavaライブラリがありますか?javaまたはlinuxのコマンドラインで数値の集合から90%の分布値を計算するには?
おかげで、
ショーン
私は統合テストを実行し、実行時間のリストを返しました。私は平均ではなくその結果セットから90%の分布値を見つける必要があります。これは、ユーザーが90%の時間に遭遇するものを表しているためです。そこにはLinuxコマンドラインがありますか?そうでない場合は、それを行うJavaライブラリがありますか?javaまたはlinuxのコマンドラインで数値の集合から90%の分布値を計算するには?
おかげで、
ショーン
各測定値が別々の行にあり、実際の測定値が第1列にあると仮定して、行数をカウントし、その数値をLとします。逆順にソートすると、L/10行目の最初のフィールドが印刷されます。非整数L/10をどのように丸めるかはあなた次第です。 n(floor(L/10))とn(ceil(L/10))の間の値を補間することもできます。
#!/bin/sh
L=$(wc -l <data.txt)
sort -r -n data.txt |
awk "NR >= $L/10"'{print $1; exit}'
これは、フィールドが空白で区切られていることを前提としています。
あなたは90番目percentileを探しています。実行時間を最短から最長に並べ替えるだけで、最後から10%の位置にあるものを選択するだけです。引用された記事は他の方法について説明しています。
あなたは簡単にこの使用してJavaやUnixコマンドを実装することができます:sort
、wc
、head
とtail
またはsed
。
Wikiリンクありがとう –
時間をリストまたは配列に保存する場合、これを行うことができます。
これを実行するJavaライブラリがない場合は、
ちょうど2行のJavaコードです。私はそれをあなたのJavaプログラムに追加して、対処する出力が少なくて済むようにします。
List<Long> times = new ArrayList<>();
// add times
Collections.sort(times);
System.out.printf("The typical, 90%% and 99%%tile times were %,d/%,d/%,d %n",
times.get(times.size()/2), times.get(times.size()*9/10), times.get(times.size()*99/100));
または
long[] times = new long[SAMPLES];
// add times and
Arrays.sort(times);
System.out.printf("The typical, 90%% and 99%%tile times were %,d/%,d/%,d %n",
times[SAMPLES/2], times[SAMPLES*9/10], times[SAMPLES*99/100]);
ユーザは、時間の90%を発生しますものを表すので。
実際、90パーセンタイルは90%未満の時間です。ユーザーはこの遅延(またはそれ以上)の10%しか経験しません。
出力がどのようなものか分からずに、それはすべて推測です。問題文は、awkの約2行で解決できるように聞こえます。 – tripleee