2013年8月18日日曜日

boostのublasのベクトル計算メモ

Pythonではnumpyを使わせて頂いてだいぶ作業が楽だ。
C++でベクトル計算するときは、boostにublasという行列ライブラリがあるのでそれを使って計算ができる。vector宣言がSTLと被るので注意が必要。

ベクトルや行列同士の積は関数で計算するようだ。
以下使い方のメモ

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

using namespace std;

int main() {
 using namespace boost::numeric;

 ublas::vector<double> v1(3);
 ublas::vector<double> v2(3);
 ublas::matrix<double> m(3,3);

 for(unsigned i = 0; i < v1.size(); i++) {
  v1[i] = i;
  v2[i] = i+3;
 }
 
 for (unsigned i = 0; i < m.size1(); i++)
        for (unsigned j = 0; j < m.size2(); j++)
            m(i, j) = 3 * i + j;
       

 cout << "v1: " << v1 << endl;
 cout << "v2: " << v2 << endl;

 cout << "add:   "  << v1 + v2  << endl;
 cout << "sub:   "  << v1 - v2  << endl;
 cout << "multi: " << 5.0 * v1 << endl;
 cout << "div:   "  << v1 / 5.0 << endl;

 //product operation
 cout << "inner: "  << ublas::inner_prod(v1,v2) << endl;
 cout << "outer: "  << ublas::outer_prod(v1,v2) << endl;

 //with matrix
 cout << "prod: " << ublas::prod(m,v1) << endl;

}


0 件のコメント:

コメントを投稿