行列の結合
行列データが複数あった場合、それらの行列を結合するにはどうすればいいでしょうか。以下のデータは2005年と2006年の2年の黒点数データです。1月から3月、4月から6月、7月から9月、10月から12月の3ヶ月ごとに改行されている4行3列の行列データです。
31 29 24
24 42 39
40 36 21
8 18 41
2006年
15 4 10
30 22 13
12 12 14
10 21 13
行列データを縦に繋げる
この2つの行列データを縦に結合するのは簡単です。2005年の行列データと2006年の行列データをそれぞれdata5.txt、data6.txtとすると以下のようにリダイレクトを使って、tmpファイルに追加していきます。
>rpn <data6.txt >>tmp
これで、tmpファイルにdata5.txtとdata6.txtが連続して格納されました。tmpファイルの内容を確認してみましょう。
31 29 24
24 42 39
40 36 21
8 18 41
15 4 10
30 22 13
12 12 14
10 21 13
2つの行列データが縦に結合されていますね。では、以下のように横に結合するにはどうすればいいでしょうか。
31 29 24 15 4 10
24 42 39 30 22 13
40 36 21 12 12 14
8 18 41 10 21 13
行列データを横に繋げる
このように横に結合するには、ユーティリティーパッケージのpasteプログラムを使います。ただし、結合対象の行列データの行数と列数は完全一致している必要があります。
では、具体例で示します。先ほどの2005年と2006年の行列データは両方とも4行3列の行列で完全一致しています。直前に作業したtmpファイルには2005年と2006年の行列データが縦に結合された状態で格納されています。このデータをpasteプログラムに渡してみましょう。
31 29 24 15 4 10
24 42 39 30 22 13
40 36 21 12 12 14
8 18 41 10 21 13
行列データが横に繋がっていることが分かります。pasteプログラムの前に2が指定してありますが、これは行列データが2つあることを意味しています。
つまり、横に行列データを結合するときは、一旦縦にデータを結合してからpasteで横に繋ぎ直すことになります。
3つ以上の行列データも簡単
pasteプログラムは、3より多い行列データの横結合も可能です。以下の2007年のデータを追加して、3つの行列データを横に結合してみましょう。
16 10 4
3 11 12
9 6 2
0 1 10
2007年の行列データがdata7.txtに格納されているとして、2005年から2007年の行列データを縦に結合してから、pasteに渡します。
>rpn <data6.txt >>tmp
>rpn <data7.txt >>tmp
>rpn 3 -c paste <tmp
31 29 24 15 4 10 16 10 4
24 42 39 30 22 13 3 11 12
40 36 21 12 12 14 9 6 2
8 18 41 10 21 13 0 1 10
きちんと、横に3年分のデータがつながっていますね。
pasteは1000個の数値程度を目安に使用してください。
本講座で使用したプログラムは、ユーティリティーパッケージとして購入することができます。xypとnpdはrpnの姉妹ソフトウェアです。詳しくはプロダクトを参照ください。