boostでmatrixのrow vectorを取得する
boostの行列を扱っていて列や行ベクトルが必要になるときがある。そういう場合は、boost/numeric/ublas/matrix_proxy.hpp
を使う。
サンプルコード
#include <iostream> #include <boost/numeric/ublas/io.hpp> #include <boost/numeric/ublas/matrix.hpp> #include <boost/numeric/ublas/matrix_proxy.hpp> using namespace boost::numeric::ublas; int main() { matrix<double> B(5,5,0.0); for (std::size_t i = 0; i < 5; ++i) { B(i, i) = 1.0; matrix_row< matrix<double> > row(B, i); //inner product std::cout << inner_prod(row, row) << std::endl; std::cout << row << std::endl; } return 0; }
出力例
1 [5](1,0,0,0,0) 1 [5](0,1,0,0,0) 1 [5](0,0,1,0,0) 1 [5](0,0,0,1,0) 1 [5](0,0,0,0,1)
matrix_row
のテンプレート引数には、行ベクトルが欲しい行列の型を入れる。
ベクトルと同じ様に内積や行列との積の計算ができる。
注意点
matrix_rowのコンストラクタで、Bがconst
の場合は次のようにする。
#include <iostream> #include <boost/numeric/ublas/io.hpp> #include <boost/numeric/ublas/matrix.hpp> #include <boost/numeric/ublas/matrix_proxy.hpp> using namespace boost::numeric::ublas; int main() { const matrix<double> B(5,5,0.0); //const matrix<double> for (std::size_t i = 0; i < 5; ++i) { B(i, i) = 1.0; matrix_row< const matrix<double> > row(B, i); //const matrix<double> //inner product std::cout << inner_prod(row, row) << std::endl; std::cout << row << std::endl; } return 0; }