18,156 total views, 6 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次元配列の平均値と中央値を求めた
- 平均値の求め方の紹介をした
- 中央値の求め方の紹介をした