IT++とは

信号処理プログラムの開発に最適な数値計算ライブラリ.
ARモデルとかARMAモデルなどが実装されてるので時系列解析もOK. その他, 行列の分解(固有値, LU, SVD, QR)やDCT,FFTさらにICAも実装されている.
MATLAB意識してかかれてるぽい. 行列とかベクトルの要素の設定がMATLABぽい.


インストール

Windows+VC2008

it++4.0.7の実例
  1. http://sourceforge.net/projects/itpp/からit++4.0.7をダウンロードして解凍
    C:\直下に置くといいかも
  2. 以下をダウンロード
    http://herve.boeglen.free.fr/itpp_windows/chap1/blas_win32.lib
    http://herve.boeglen.free.fr/itpp_windows/chap1/lapack_win32.lib
    http://herve.boeglen.free.fr/itpp_windows/chap1/blas_win32.dll
    http://herve.boeglen.free.fr/itpp_windows/chap1/lapack_win32.dll
  3. itpp-4.0.7\win32\itpp_mkl.slnを開く
  4. ソリューションのプロパティ->[構成プロパティ]->[C/C++]->[プリプロセッサ]->[プリプロセッサの定義]からHAVE_MKLを消す. Debug, Release両方
  5. itpp-4.0.7\itpp\config_msvc.hに以下を追加
    #define HAVE_LAPACK 1
    #define HAVE_BLAS 1
  6. ビルド
  7. itpp-4.0.7\win32\libに以下をコピー
    blas_win32.lib
    lapack_win32.lib
  8. itpp-4.0.7\win32\dllを作成し, 以下をコピー
    blas_win32.dll
    lapack_win32.dl
  9. 環境変数Pathにdllを含むディレクトリパスを追加
  10. VCのインクルードディレクトリにitpp-4.0.7を追加
    ライブラリディレクトリにitpp-4.0.7\win32\libを追加.

Linux

IT++のビルドにはLAPACK, BLAS, FFTWが必要(ってわけじゃないけど, 機能が制限されるので入れます). それらのインストール後にIT++をビルドする.

LAPACK, BLASのインストール

LAPACKのパッケージの中にBLASも入ってるので個別に落とす必要は無い.
cd [install dir]
wget http://www.netlib.org/lapack/lapack.tgz
tar zxvf lapack.tgz
cd lapack-3.2.1
make blaslib
mv make.inc.example make.inc
make

FFTWのインストール

wget http://www.fftw.org/fftw-3.2.2.tar.gz
tar zxvf fftw-3.2.2.tar.gz
cd fftw-3.2.2
./configure --prefix=[install dir]/fftw-3.2.2
make
make install

IT++のインストール

wget http://downloads.sourceforge.net/itpp/itpp-4.0.7.tar.gz
tar zxvf itpp-4.0.7.tar.gz
cd itpp-4.0.7
./configure  --prefix=[install dir]/itpp-4.0.7 --with-lapack=[install dir]/lapack-3.2.1/lapack_LINUX.a --with-blas=[install dir]/lapack-3.2.1/blas_LINUX.a --with-fft=[install dir]/fftw-3.2.2/lib/libfftw3.a --with-fft-include=[install dir]/fftw-3.2.2/include/
make
make install

Myプログラムのビルド

Windows+VC2008

blas_win32.lib, lapack_win32.lib, itpp.lib(itpp_debug.lib)をリンク
コード生成でマルチスレッド(マルチスレッドデバッグ)を選択

Linux


使い方とか

ベクトル

  1. // 3次元の列ベクトル
  2. vec v1(3);
  3. vec v2("1 2 3");
  4. vec v3 = "1 2 3";
  5.  
  6. // 零ベクトルに初期化
  7. v1.zeros();
  8.  
  9. // 第2要素の取得
  10. double a = v1(1);
  11.  
  12. // 最小要素のインデクスを取得
  13. int idx = itpp::min_index(v3);
  14.  
  15. // スカラ積
  16. itpp::dot(v2, v3);
  17.  

行列

  1. // 3行4列の行列
  2. mat m1(3, 4);
  3.  
  4. mat m2 = "1 2 3; 4 5 6";
  5.  
  6. // 配列を用いてインスタンスを作成
  7. double arr[] = {
  8. 1, 2, 3,
  9. 4, 5, 6,
  10. 7, 8, 9
  11. };
  12. mat m3(arr, 3, 3);
  13.  
  14. // 1行2列目の要素取得
  15. double b = m1(0, 1);
  16.  
  17. // 行数取得
  18. int r = m1.rows();
  19.  
  20. // 列数取得
  21. int c = m1.cols();
  22.  
  23. // 逆行列
  24. itpp::inv(m3);
  25.  
  26. // 単位行列(nxn)
  27. itpp::eye(n);
  28.  
  29. // 零行列で初期化
  30. m3.zeros();
  31.  
  32. // 対称行列の固有値分解
  33. vec d;
  34. mat v;
  35. itpp::eig_sym(m3, d, v);
  36.  
  37. // 最小要素の行番号, 列番号の取得
  38. int row, col;
  39. itpp::min_index(m3, row, col)
  40.  
  41.  

注意

行列, ベクトル宣言

コンストラクタでは各要素は初期化されない. そのため, 状況に応じてmat::zeros()等で初期化すること.

列ベクトルと行ベクトルの積

*オペレータがオーバーロードされているが使用は推奨されてない.
代わりにitpp::outer_product()を使うべき.使い方はこんな感じ.
  1. itpp::vec v1 = "1 2 3";
  2. itpp::vec v2 = "1 2 3";
  3. itpp::mat m;
  4.  
  5. // (・A・)イクナイ
  6. m = v1 * v2.T();
  7. std::cout << m << std::endl;
  8.  
  9. // 大丈夫
  10. m = itpp::outer_product(v1, v2);
  11. std::cout << m << std::endl;



カウンタ -
最終更新:2011年06月18日 17:01