29

Ruby で boxplot ジェネレーターを作成していますが、いくつか計算する必要があります。

この配列があるとしましょう:

arr = [1, 5, 7, 2, 53, 65, 24]

上記の配列から、最小値 (1)、最大値 (65)、合計 (157)、平均 (22.43)、および中央値 (7) を見つけるにはどうすればよいですか?

ありがとう

4

2 に答える 2

64
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
于 2010-06-03T15:53:21.977 に答える
1

上記の sepp2k の回答で示されているように、最小値、最大値、合計値、および平均値を見つけることは簡単で、線形時間で簡単に実行できます。

中央値を見つけることはそれほど簡単ではなく、単純な実装 (ソートしてから中央の要素を取得する) は O(nlogn) 時間で実行されます。

ただし、線形時間で中央値を見つけるアルゴリズムがあります (5 の中央値アルゴリズムなど)。他のものは、あらゆる種類の順序統計 (たとえば、5 番目に小さい要素を見つけたい) に対しても機能します。それらの問題は、それらを自分で実装する必要があることです.Rubyの実装がないことを私は知っています.

O(nlogn) はすでに非常に高速であるため、巨大なデータセットで作業する予定がない場合 (そして、とにかくデータを並べ替える必要がある場合) は、それで問題ありません。

于 2012-12-26T18:42:14.113 に答える