Top Pageに戻る。

どわすれ Perl メモ

Perlの小技をまとめておきます。

目次

配列あれこれ

配列にある値が含まれているかどうかを調べる

grep を使えばできます。 しかし、配列の要素数が多いときは時間がかかるので、おすすめできません。

多次元配列あれこれ

多次元配列の作成

配列の各要素に、配列への参照を代入すれば多次元配列ができあがり。

多次元配列の要素となる配列を取り出す

多次元配列の要素となっている配列を取り出すには、 下のように @{〜} とすればよい。

2次元配列をコピー(deep copy)する関数

@b=@aだとうまくいかないので要注意. 次のような関数でコピーできます.

2次元配列をつなげる関数

2つの2次元配列をつなげて,あらたに2次元配列を作る関数.

2次元配列の最後に配列を追加

2次元配列の最後に,(1次元)配列を追加するには, [ @〜 ]push すればよいです。

行列計算 — MatrixRealパッケージを使う

MatrixRealパッケージを使って、Perlで行列計算を行う方法をまとめておきます。 MatrixReal Version:1.9について記述しています. 最新版で動くかどうかは未確認です.ソースファイルなどへのリンクは1.9のままです.古いです. 行列の乗算・逆行列・転置行列・行列式・トレース・実対称行列の対角化 などいろいろできます。 詳しくは、 マニュアルを参照。

MatrixRealパッケージのインストール

MatrixReal.pm をダウンロードして、 /usr/lib/perl5/Math/ っぽい名前のディレクトリの下に 保存すれば使えるようになります。
ActivePerl では,「スタートメニュー」→「Active Perl」→「Perl Package Manager」を 実行(もしくはコマンドプロンプトからppm を実行)すれば,GUI画面でインストールできると思われます。便利です。

MatrixRealパッケージの読み込み

ソースファイルの先頭あたりに以下を書いておく。

use Math::MatrixReal;

行列の定義

べたっと書くのが最も簡単。

2次元配列への参照を渡して定義することも可能。

nm列の0行列は、 new Math::MatrixReal(n,m) とすればできる。

行列の各要素を表す関数を使っても定義できる。

行列の情報を取得

$mat->dim() とすれば、 $mat の (行数, 列数) が返ってくる。

$mat->element(i,j) とすれば、 $mat(i,j)-要素の値が返ってくる。

行列を部分的に変更

$mat->assign(i,j,x) とすれば、 $mat(i,j)-要素を x に変更できる。

行列の足し算・掛け算

普通の数字の演算と同じく、 +, -, *, ** などが使える。

逆行列を求める

$mat->inverse() とすれば、 $mat の逆行列が返ってくる。 逆行列がない場合は、undef が返ってくる。

転置行列を作る

$mat2->trans($mat1) とすれば、 $mat2$mat1 の転置行列が代入される。 ただし、$mat2 は、あらかじめしかるべきサイズの 行列として定義されている必要がある。

行列式・対角和を求める

$mat->det(), $mat->trans() で、 $mat の行列式, 対角和(トレース)が返ってくる。
Top Pageに戻る。 このページの上へ。