行列の結合 | package入門(ユーティリティー編) [講座] | 逆ポーランド電卓の実践ウェブ rpn hacks!

逆ポーランド電卓の実践ウェブ rpn hacks!

逆ポーランド電卓rpnの実践ウェブ   
rpn hacks! アールピーエヌ・ハックスサイトマップ

rpn | 講座 | package入門 | ポテンシャルを飛躍的に高めるrpnパッケージを学習。

行列の結合

 行列データが複数あった場合、それらの行列を結合するにはどうすればいいでしょうか。以下のデータは2005年と2006年の2年の黒点数データです。1月から3月、4月から6月、7月から9月、10月から12月の3ヶ月ごとに改行されている4行3列の行列データです。

  2005年
  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ファイルに追加していきます。

情報リダイレクトに関しては、dos入門リダイレクトを参照のこと。

  >rpn <data5.txt >tmp
  >rpn <data6.txt >>tmp


これで、tmpファイルにdata5.txtとdata6.txtが連続して格納されました。tmpファイルの内容を確認してみましょう。

  >type 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つの行列データが縦に結合されていますね。では、以下のように横に結合するにはどうすればいいでしょうか。

  2005年と2006年の横結合
  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プログラムに渡してみましょう。

  >rpn 2 -c paste <tmp
  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つの行列データを横に結合してみましょう。

  2007年
  16 10  4
   3 11 12
   9  6  2
   0  1 10


2007年の行列データがdata7.txtに格納されているとして、2005年から2007年の行列データを縦に結合してから、pasteに渡します。

  >rpn <data5.txt >tmp
  >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の姉妹ソフトウェアです。詳しくはプロダクトを参照ください。

ユーティリティーパッケージ

ユーティリティー

マイスター

カレンダー

警告文字で作られた図表や式が崩れることがあります。ブラウザによっては固定幅フォントをMSゴシックにするときれいに表示されます。それでも崩れる場合は図表や式をメモ帳にコピー後、閲覧下さい。

警告rpn標準版(2kリビジョン)はダブルクォートで囲ってください。

rpn 1 2 + ⇒ rpn "1 2 +"
rpn 1 -c foo ⇒ rpn "1" -c "foo"

ダブルクォートは省略できることが多いのですが、慣れない間は囲んだほうが無難です。なお、本ウェブサイトの記事ではrpn標準版(98リビジョン)を使用しているため囲っていません。詳しくは技術サポートの「rpn TIPS」を参照ください。

注意rpnの障害情報と対策はこちら