Ruby で boxplot ジェネレーターを作成していますが、いくつか計算する必要があります。
この配列があるとしましょう:
arr = [1, 5, 7, 2, 53, 65, 24]
上記の配列から、最小値 (1)、最大値 (65)、合計 (157)、平均 (22.43)、および中央値 (7) を見つけるにはどうすればよいですか?
ありがとう
lowest = arr.min
highest = arr.max
total = arr.inject(:+)
len = arr.length
average = total.to_f / len # to_f so we don't get an integer result
sorted = arr.sort
median = len % 2 == 1 ? sorted[len/2] : (sorted[len/2 - 1] + sorted[len/2]).to_f / 2
上記の sepp2k の回答で示されているように、最小値、最大値、合計値、および平均値を見つけることは簡単で、線形時間で簡単に実行できます。
中央値を見つけることはそれほど簡単ではなく、単純な実装 (ソートしてから中央の要素を取得する) は O(nlogn) 時間で実行されます。
ただし、線形時間で中央値を見つけるアルゴリズムがあります (5 の中央値アルゴリズムなど)。他のものは、あらゆる種類の順序統計 (たとえば、5 番目に小さい要素を見つけたい) に対しても機能します。それらの問題は、それらを自分で実装する必要があることです.Rubyの実装がないことを私は知っています.
O(nlogn) はすでに非常に高速であるため、巨大なデータセットで作業する予定がない場合 (そして、とにかくデータを並べ替える必要がある場合) は、それで問題ありません。