スパース行列(疎行列)の行や列を入れ替える事で,要素がのある組を対角要素付近に集めて,かつクラスター化するアルゴリズムに reverse Cuthill McKee というものがある.
これを Python で使用したく,探したところ pyorder (http://github.com/dpo) が見つかった.

Fortran で書かれたアルゴリズムを Python で使えるようにしたものである.
以下は pyorder を OSX Leopard にインストールするためのメモである.

あらかじめ numpy をインストールしておく必要がある.

また,以下の Fortran コードが必要である.

mc60ad.f
mc21ad.f

以下からダウンロードできる.
http://www.enq.ufrgs.br/cursos/index.php?dir=pos/MetNumII/algebra/hsl2004/hsldist/f77/source/&sort=m_time&sort_mode=a.

pyoder のアーカイブが $PYORDER/ に展開されたとする.

Fortran の上記2ファイルは,例えば,$PYORDER/fortran に置いたとすると,

$PYORDER/site.cfg の最下行にある hsl_dir = にこのパスを設定する.

pyorder のコンパイルは

$ python setup.py build

とし,インストールは

$ sudo python setup.py install

とする.

デフォルトでは

/Library/Python/2.5/site-packages/pyorder

にインストールされる.


上記のままだと,Fortran のコードからライブラリを作成するところがうまくいかない.
コンパイラは g95 を使っている.(g77でも同様)
結果的には -undefined dynamic_lookup というオプションを追加する必要がある.

これを含めたコンパイルコマンドは,

g95 -undefined dynamic_lookup -L/sw/lib build/.../mc60modulemodule.o build/.../fortranobject.o build/.../mc60ad.o -o build/.../mc60module.so

となる.... は自動的に設定されるパスである
もしかしたら,-L/System/Library/Frameworks/Python.framework/Versions/2.5 -lPython も必要かもしれない.

上記オプションをつけないと,
Undefined symbols:
"_PyModule_GetDict", referenced from:
_initmc21module in mc21modulemodule.o
"_Py_FindMethod", referenced from:
_fortran_getattr in fortranobject.o
"_PyExc_AttributeError", referenced from:
_PyExc_AttributeError$non_lazy_ptr in fortranobject.o
"_PyString_FromString", referenced from:
_initmc21module in mc21modulemodule.o
_initmc21module in mc21modulemodule.o
_fortran_getattr in fortranobject.o
_fortran_getattr in fortranobject.o
"_PyCObject_FromVoidPtr", referenced from:
_fortran_getattr in fortranobject.o
 ・・・
ld: symbol(s) not found

というエラーが大量にでる.

-L/System/Library/... -lPython をつけると,_Py*** に関するエラーは出なくなるが,
Undefined symbols:
"_MAIN_", referenced from:
_main in libf95.a(main.o)
ld: symbol(s) not found

というエラーが残る.

このエラーの対処については,http://lists.apple.com/archives/unix-porting/2007/Aug/msg00008.html を参考にした.



scipy という有名なパッケージもあるが,これをインストールするにはいろいろ関連パッケージをインストールしないといけないようなので,今回はパスした.




やじるし スパース行列関連メモの目次