Boost::ublas(1) 四則演算とmatrix,vector型のアクセスについて
Sponsored Links
皆さんこんにちわ。
お元気ですか?私はXORを学習するニューラルネットワークが完成して満足です。
さて、本日はublasについて
ublasとは行列演算を行うboostに付属しているライブラリです。
つまり、boostをインストールすれば使えます。
行列演算が多くなる機械学習とかを実装するには非常に便利になるライブラリです。
そんなboostの使い方、
今回はmatrix、vectorへの要素アクセス,変数の代入と単純な四則演算の計算について見ていきましょう
要素アクセスと代入
#include <boost/numeric/ublas/vector.hpp> #include <boost/numeric/ublas/matrix.hpp> #include <boost/numeric/ublas/io.hpp> using namespace boost::numeric::ublas; int main(void){ matrix<double> mat(3,4); //3行4列 vector<double> vect(4); //4次元ベクトル std::cout << mat << std::endl; std::cout << vect << std::endl; mat(1,2) = 100; //1行目の2列目 mat(2,3) = 200; //2行目の3列目 vect(1) = 30; vect(0) = 20; std::cout << mat << std::endl; std::cout << vect << std::endl; }
mat型は(行、列)と指定して値を代入しています。
vector型はstd::vectorとは別なので、混同しないように気をつける必要があります。
[3,4]((0,0,0,0),(0,0,0,0),(0,0,0,0)) [4](0,0,0,0) [3,4]((0,0,0,0),(0,0,100,0),(0,0,0,200)) [4](20,30,0,0)
四則演算
#include <boost/numeric/ublas/vector.hpp> #include <boost/numeric/ublas/matrix.hpp> #include <boost/numeric/ublas/io.hpp> using namespace boost::numeric::ublas; int main(void){ //初期化 matrix<double> mat1(2,2); mat1(0,0) = 2.0; mat1(0,1) = 1.0; mat1(1,0) = 3.0; mat1(1,1) = 4.0; matrix<double> mat2(2,2); mat2(0,0) = 4.0; mat2(0,1) = 3.0; mat2(1,0) = 2.0; mat2(1,1) = 1.0; vector<double> vec1(2); vec1(0) = 2.0; vec1(1) = 3.0; vector<double> vec2(2); vec2(0) = 4.0; vec2(1) = 5.0; //一応 std::cout << "行列の内容を出力" << std::endl; std::cout << mat1 << std::endl; std::cout << mat2 << std::endl; std::cout << vec1 << std::endl; std::cout << vec2 << std::endl; //和 std::cout << "和" << std::endl; std::cout << mat1 + mat2 << std::endl; std::cout << vec1 + vec2 << std::endl; //差 std::cout << "差" << std::endl; std::cout << mat1 - mat2 << std::endl; std::cout << vec1 - vec2 << std::endl; //積 std::cout << "積" << std::endl; std::cout << prod(mat1,mat2) << std::endl; //定数倍 std::cout << "定数倍" << std::endl; std::cout << 5 * mat1 << std::endl; std::cout << "定数で割る" << std::endl; std::cout << mat1 / 5 << std::endl; }
うん、特にありませんね。
行列の内容を出力 [2,2]((2,1),(3,4)) [2,2]((4,3),(2,1)) [2](2,3) [2](4,5) 和 [2,2]((6,4),(5,5)) [2](6,8) 差 [2,2]((-2,-2),(1,3)) [2](-2,-2) 積 [2,2]((10,7),(20,13)) 定数倍 [2,2]((10,5),(15,20)) 定数で割る [2,2]((0.4,0.2),(0.6,0.8))
次回はもう少し複雑なことをやりたいと思います。