今回は、2次元配列に格納されているデータの各行の合計を求めるアルゴリズムをまとめます。
生徒それぞれについて全科目のテストの合計をまとめて計算したい等、使う場面は多々ありそうです。
目的と条件
- 2次元配列(NxM)の各行の合計を求め、毎行N+1列目に格納する
- 元データの配列は以下のように表すものとする。
data[i][j] (0 ≦ i ≦ N-1、 0 ≦ j ≦ M-1)
擬似コード例
各行の要素の処理(今回は合計を求める処理)を、全行に対し繰り返しを行います。
今回のアルゴリズムの擬似コード例を示します。
Procedure RAW_SUM(data):
i ← 0 # i=0行目 (0 ≦ i ≦ N)から開始
while i < N do # N行繰り返し
j ← 0
sum ← 0
while j < M do # M列繰り返し
sum ← sum + data[i][j] # 各列の値を加算
j ← j + 1
end-while
Add data[i][N] # 合計値格納用の要素を追加
data[i][N] ← sum # 合計値を代入
i ← i +1
end-while
return data
Pythonコード例
Pythonコード例を示します。
>>> def raw_sum(data):
... for i in data:
... sum_ = 0
... for j in range(len(i)):
... sum_ += i[j]
... i.append(sum_)
...
... return data
実行結果
配列データの例として、5☓3次元のデータを考えます。各要素は0〜10の整数値をランダムに設定しています。
>>> data = [[3, 3, 2], [5, 7, 9], [3, 4, 6], [9, 1, 5], [8, 5, 8]]
>>> raw_sum(data)
[[3, 3, 2, 8], [5, 7, 9, 21], [3, 4, 6, 13], [9, 1, 5, 15], [8, 5, 8, 21]]
各行の最後(一番右)に元データ各行の合計値が格納されています。
コードはこちらにアップロードしましたのでご参照ください。
まとめ
今回は配列操作の一例として、2次元配列の各行の合計を求めるアルゴリズムについてまとめました。このくらいの処理であればnumpyモジュールを使えばもう少し楽に書けると思いますが、これは別の機会にまとめたいと思います。
(参考文献:杉浦賢、図解でかんたんアルゴリズム 情報処理のかなめとなる考え方が手に取るようにわかる、Softbank Creative)