LAPACK wrapper + Matrix/Vector + Some well-known statistical techniques = Lisys
長らく放置状態になっていた Lisys ですが,コード管理を GitHub に変更しました.コード管理が中途半端なまま放置するのは精神的によくありませんでしたので.
https://github.com/krdlab/lisys
これはなに?
「LAPACK のほんの一部を C# 向けにラップ + Matrix/Vector + 少量の分析手法」が含まれたライブラリです.
エントリを掘り返してみると,作成はずいぶん前ですね.
昔,Windows 向けの GUI 分析ツールを作るために作成しました.作成当時は .NET 向けの良いライブラリがなく,「じゃあ LAPACK を利用させてもらおうかな」ということでできあがったものです.
元々は CLAPACK の使い方を学ぶために C++ でコードを書いており,そいつの派生物として作成しました.
しかし今となっては Math.NET Project がありますから,そちらの利用を検討した方が良いかもしれません.DotNumerics というのもあります.これらは pure C# なので Lisys よりも利用が簡単です.
何ができるの?
sample や test を見ていただければ.
64bit 対応が...
既に Visual Studio 2012 が出ているものの,Lisys は Visual C# 2010 Express と Visual C++ 2010 Express を利用して作成しています (2012 が出る大分前から 2008 → 2010 移行を開始したものの,しばらく放置してたらいつの間にか 2012 が出ていた).
Visual C++ 2010 Express Edition は 32bit コンパイラのみであるため,混合アセンブリを生成する Lisys も 32bit 版しか動作確認をしていません *1.
CLAPACK-3.1.1-VisualStudio を利用する
長らく Lisys は CLAPACK3-Windows を利用していたのですが,開発環境を Visual Studio 2008 へ移行するのに伴い,CLAPACK-3.1.1-VisualStudio に変更しました.
CLAPACK
問題
しかしまぁ,すんなりといくはずもなく...
CLAPACK-3.1.1-VisualStudio は /MT でビルドされているらしく,/clr でビルドしている Lisys ではリンカエラーが発生します.
// ↓例えばこんな感じのエラー
エラー 8 error LNK2005: _exit は既に MSVCRT.lib(MSVCR90.dll) で定義されています。 libcmt.lib CLW
Lisys を /MT にできればよいのですが,/clr では /MT を指定できません (Lisys は混合アセンブリです).
よって,CLAPACK-3.1.1-VisualStudio を /MD でリビルドする必要があります.
ビルド環境
Windows XP SP3
Visual Studio 2008 SP1
オプション変更
blas,clapack,libf2c プロジェクトのプロパティを開き,以下の値に変更します.
- [構成プロパティ]-[C/C++]-[コード生成] の [ランタイム ライブラリ]
- Release: /MD
- Debug : /MDd
コード修正
// at F2CLIBS\libf2c\fio.h ... extern int isatty(int); ...
が,
// Visual Studio 9.0\vc\include\io.h ... _Check_return_ _CRT_NONSTDC_DEPRECATE(_isatty) _CRTIMP int __cdecl isatty(_In_ int _FileHandle); ...
のリンケージと異なるため,リンク時にエラーが発生します (libf2c プロジェクトの open.c にて発生).
今回は,fio.h の "extern int isatty(int);" をコメントアウトすることで対処します.
ビルド
Debug without wrap Win32/Release without wrap Win32 でビルドします.
大量のエラー&警告が発生します (主にテストプロジェクトで発生) が,blas/clapack/libf2c プロジェクトのビルドが正しくできていれば問題ないと思います.
利用方法
Lisys-0.6.4 の readme.ja にある「■ ライブラリのビルド方法」をご覧ください.
基本的には,clapack_nowrap.lib,BLAS_nowrap.lib,libf2c.lib をリンク対象に追加すれば OK です.
追記 2010/06/29
以下のサイトによると,6 ファイルほどプロジェクトから漏れているようです.
念のため確認してみると,実際には 8 ファイル漏れています (blas.vcproj と BLAS/SRC/*.c を突き合わせて確認).
- csrot.c
- drotm.c
- drotmg.c
- dsdot.c
- sdsdot.c
- srotm.c
- srotmg.c
- zdrot.c
上記を blas プロジェクトの Srouce Files に追加すれば OK.上記のやつらは LAPACK-revisions3.1.1.info によると,3.1.1 で加えられた新しい関数っぽい.何で抜けてたんだろう...
lib のシンボル確認は以下の通り.
dumpbin /linkermember hoge.lib /out:hoge.symbol.txt
Lisys-0.6.4
(2012/11/11: github に移りました → http://d.hatena.ne.jp/KrdLab/20121111/1352633124)
Visual Studio 2008 向けにバイナリを作成しました.
http://krdlab.kakurezato.com/lisys/Lisys-0.6.4.ziphttp://krdlab.kakurezato.com/lisys/Lisys-0.6.4-src.ziphttp://krdlab.kakurezato.com/lisys/LisysSample.zip
(追記 2010/12/19:zip へアクセスできなくなっているので,ここ からダウンロードしてください)
ターゲットは .NET Framework 2.0 のままです.
クラスやメソッド等に変更はありません (ので revision アップです).
だたし,内部で利用している CLAPACK を CLAPACK-3.1.1-VisualStudio に変更しました.
(以前のバージョンはこちら→ http://d.hatena.ne.jp/KrdLab/20080101/1199199036)
C のライブラリをリンクしている都合上,Visual C++ Runtime のバージョンがズレているとアセンブリロード時にエラーが発生します.
エラーが発生した場合は,以下のサイトから Runtime をダウンロードしてください.
また,ヘルプファイルの作成に Sandcastle を使いましたので,多少見た目が変わっています.
お手柔らかに...
Lisys の利用方法について
FileLoadException - Study And Study - Yahoo!ブログ
FileLoadException解決っ! - Study And Study - Yahoo!ブログ
↑について,コメントを書き込めなかったのでこっちに書きます.
おそらくこれ↓
を導入するだけで動くようになると思います.
(※もし,これでもだめだったのであれば申し訳ないです.そのときは,かなり気になるので調査します.)
一応,DLL を参照設定するだけで OK なことは確認しています.
(※開発マシンとは別のマシンで動作確認しています)
ただし,Lisys を VS2008 でビルドした場合,別の人のマシンで動かすときは VS2008 の再頒布可能パッケージ (x86) が必要になります.
C#で数値計算&統計処理(そんなにすごくない版)
以前↓ここで紹介したやつです.
http://d.hatena.ne.jp/KrdLab/20071003
かたちになってきたので,公開してみようと思います.
(2012/11/11: github に移りました → http://d.hatena.ne.jp/KrdLab/20121111/1352633124)
まだα版,といった感じですが,もし良かったら使ってみてください.
まだまだ機能が貧弱なので,もうちょいがんばる予定です.
(2009/05/07: Lisys-0.6.4 をリリースしました→ http://d.hatena.ne.jp/KrdLab/20090507/1241626831)
開発環境
- WindowsXP Home Edition SP2(Professionalが欲しいなぁ)
- Visual Studio 2005 SP1
なんか動かねぇぞ?ってひとは,
http://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=200b2fd9-ae1a-4a14-984d-389c36f85647
をインストールしてみてください.
ライブラリの利用については,特に制限を設けておりません.
ソースコードに関しては,煮るなり焼くなり好きにしてください.
(クラス構成については,一度洗い直す必要があります)
お手柔らかに...