Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

Boost::ublasで行列計算する その1:行列を生成

BoostのサブライブラリであるuBlasでは行列やベクトルのような線形代数の計算を高速かつ見通しよく実施することができます。

実際のところ

導入

Ubuntuでの導入なら、apt-get経由でlibboost-devを使ったほうが楽です。
私のように、単に試したいという動機ならビルドしようとしたりすると無闇に時間がかかります(

$ sudo apt-get install libboost-dev

サンプル

公式のサンプルでは、こんな感じの例が提示されています。

#include <iostream>
#include <boost/numeric/ublas/vector.hpp>
#include <boost/numeric/ublas/io.hpp>

namespace ublas = boost::numeric::ublas;

int main()
{
    // double型を要素とする3次元ベクトル
    ublas::vector<double> v(3);

    // 各要素の参照と代入
    v[0] = 3.0; // x
    v[1] = 0.0; // y
    v[2] = 4.0; // z

    // 出力ストリーム
    std::cout << v << std::endl;
}
[3](3,0,4)

行列の場合は以下のような感じで

#include <boost/numeric/ublas/matrix.hpp>

//...

ublas::matrix<double> matA(3,3);

//...

//初期化
	for(int i = 0; i < 3; i++){
		for(int j = 0; j < 3; j++){
			matA(i,j) = i+j;
		}
	}