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

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

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

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

HOME > 講座 > package入門 > ユーティリティー編 > 行列の入れ替え

hatena twitter facebook rss ソーシャルブックマーク

行列の入れ替え

 表計算の「形式を選択して貼り付け」という機能に「行列を入れ替える」があります。行列の縦と横を変換する機能なのですが、rpnで計算するときも縦横を自由に変換できると便利です。

  1 2 3
  4 5 6  ------+ 2行3列
               |
         (行列入れ替え)
  1 4          |
  2 5    <-----+ 3行2列
  3 6


2年間の黒点数の推移

 以下は2006年と2007年の1月から12月までの黒点数のデータです。データはdata.txtに格納されているとします。

  15  4 10 30 22 13 12 12 14 10 21 13
  16 10  4  3 11 12  9  6  2  0  1 10


このデータをxypでグラフにしてみます。"*"が2006年、"+"が2007年のデータです。

  >rpn -c tmat <data.txt | rpn @x 1 + #x #b #a @x @a @x @b >tmp
  >xyp -x,12 -y,30 -s3,10 -k2 -m <tmp
  ^y 30        *
  |
  |
  |
  -               *                  *
  |
  |
  |  +
  |                  *         *         *
  -               +  +  *   *
  |     +  *            +         *      +
  |
  |                         +
  |     *  +   +                         x
  |o                           +     +  12
  +--------|---------|---------|--+------>


rpnプログラムのtmatは以下の章で説明しますが、グラフを見ると黒点数は30を最大にして減少しているように思えます。頭の中のイメージで"+"を繋いでみると2007年は2006年に比べて確実に減ってきていることが分かります。

rpnの行列の入れ替え

 先ほどのdata.txtで、月の黒点数平均を計算してみましょう。例えば、2006年1月と2007年1月の15と16を足します。これを12ヶ月分行うのですが、簡単に計算するために縦軸と横軸を変換します。

data.txtは縦軸が年で横軸が月でした。これを逆にして縦軸を月で横軸を年にしたい場合に、rpnではユーティリティーパッケージのtmatプログラムを使います。以下にtmatを使った例を示します。

  >rpn -c tmat <data.txt
  15 16
  4 10
  10 4
  30 3
  22 11
  13 12
  12 9
  12 6
  14 2
  10 0
  21 1
  13 10


1列目が2006年のデータ、2列目が2007年のデータであることを確認してください。それぞれを横方向に足して2で割れば平均が計算できます。

  >rpn -c tmat <data.txt | rpn + 2 /
  15.5
  7
  7
  16.5
  16.5
  12.5
  10.5
  9
  8
  5
  11
  11.5


12か月分を一気に計算できましたね。

警告tmatは縦×横の合計が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の障害情報と対策はこちら