20,065 total views, 4 views today
例えば以下のような2次元配列があったとする(参考:猛暑日、真夏日等の日数の一覧)。
var manatsubi = [
[11, 57, 74, 81, 75], //2016年の札幌、東京、名古屋、大阪、福岡それぞれの真夏日数
[6, 47, 54, 58, 42], //2015年 〃
[12, 45, 68, 65, 48], //2014年 〃
[9, 58, 88, 88, 77], //2013年 〃
[20, 66, 76, 75, 63] //2012年 〃
]; このとき、各都市ごとに2012年~2016年の平均値や中央値を求めるのは、少々面倒そうだ。
ググってみたところ、1次元配列の平均値や中央値の求め方は見つかったが、2次元配列の場合の求め方が見当たらなかった。
なので、ここでは2次元配列の平均値と中央値を求める方法を紹介する。
平均値
1次元配列の平均値の求め方は分かったので、2次元配列を複数の1次元配列に分解してから、各配列の平均値を求め、平均値のみの配列を新たに作るという方法を取った。
var average = function(arr) { //引数として渡された配列の平均値(average)を算出
var sum = 0;
for (var i = 0,len = arr.length; i < len; i++) {
sum += arr[i];
}
return sum / arr.length; //平均値を返す
};
var average_arr = function(arr) { //2次元配列の列ごとの平均値を求める
var arr_2d = [];
for (var i = 0, len_1 = arr[i].length; i < len_1; i++) {
var arr_temp = [];
for (var j = 0, len_2 = arr.length; j < len_2; j++) {
arr_temp.push(arr[j][i]); //2次元配列の各列を1次元配列として抽出
}
arr_2d.push(average(arr_temp)); //2次元配列の各列ごとの平均値を抽出
}
return arr_2d; //平均値の配列を返す
}
ちなみに、上記の関数を使って各都市の真夏日の平均値を求めると、次のとおりとなる。
var d1 = document.getElementById('avr');
d1.insertAdjacentHTML("beforeend", "<p>札幌:" + average_arr(manatsubi)[0] + "日、東京:" + average_arr(manatsubi)[1] + "日、名古屋:" + average_arr(manatsubi)[2] + "日、大阪:" + average_arr(manatsubi)[3] + "日、福岡:" + average_arr(manatsubi)[4] + "日</p>"); 中央値
考え方は、平均値の場合と全く同じである。
var median = function(arr) {
var array_length, mid;
array_length = arr.length;
new_array = arr.slice(0); //引数として渡された配列のコピーを作成
new_array.sort(function(a, b){ //コピーした配列を降順に並べ替え
if (a < b) return -1;
if (a > b) return 1;
return 0;
});
mid = Math.floor(array_length / 2); //降順に並んだ配列の中央に位置する要素のインデックス
if (array_length % 2 == 1) {
return new_array[mid]; //配列の要素数が奇数個の場合の中央値を返す
} else {
return (new_array[mid - 1] + new_array[mid]) / 2; //配列の要素数が偶数個の場合の中央値を返す
}
}
var median_arr = function(arr) { //2次元配列の列ごとの中央値を求める
var arr_2d = [];
for (var i = 0, len_1 = arr[i].length; i < len_1; i++) {
var arr_temp = [];
for (var j = 0, len_2 = arr.length; j < len_2; j++) {
arr_temp.push(arr[j][i]); //2次元配列の各列を1次元配列として抽出
}
arr_2d.push(median(arr_temp)); //2次元配列の各列ごとの中央値を抽出
}
return arr_2d; //中央値の配列を返す
} 上記の関数を使って求めた、各都市の真夏日の中央値は次のとおり。
var d2 = document.getElementById('med');
d2.insertAdjacentHTML("beforeend", "<p>札幌:" + median_arr(manatsubi)[0] + "日、東京:" + median_arr(manatsubi)[1] + "日、名古屋:" + median_arr(manatsubi)[2] + "日、大阪:" + median_arr(manatsubi)[3] + "日、福岡:" + median_arr(manatsubi)[4] + "日</p>"); まとめ
- Javascriptで2次元配列の平均値と中央値を求めた
- 平均値の求め方の紹介をした
- 中央値の求め方の紹介をした