のんびりしているエンジニアの日記

ソフトウェアなどのエンジニア的な何かを書きます。

Boost::ublas(2) matrixやvectorのリサイズ、列・行だけ取り出す、転置行列を作る方法

Sponsored Links

皆さんこんにちわ
お元気ですか?私は寒いです。

さて今回はboost::ublas第二回
お題目はなんか行や列をかえたいとか列だけ取り出したいとか転置したいとかとかあると思います。

今日はそれをやってみましょう。

ソースコード

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

using namespace boost::numeric;
using namespace std;

int main(int argc, char const *argv[])
{
	ublas::matrix<double> mat1(2,2);
	mat1(0,0) = 1; mat1(0,1) = 2;
	mat1(1,0) = 4; mat1(1,1) = 3;

	cout << mat1 << endl;
	//転置
	cout << trans(mat1) << endl;

	//1行目を抽出
	cout << row(mat1,1) << endl;
	//1列目を抽出
	cout << column(mat1,1) << endl;
	ublas::vector<double> vect =  row(mat1,1);
	cout << vect << endl;
	
	//りさいず
	mat1.resize(3,3);
	cout << mat1 << endl;

	//クリア
	mat1.clear();
	cout << mat1 << endl;
	return 0;
}

結果

[2,2]((1,2),(4,3))
[2,2]((1,4),(2,3))
[2](4,3)
[2](2,3)
[2](2,3)
[3,3]((1,2,0),(4,3,0),(0,0,0))
[3,3]((0,0,0),(0,0,0),(0,0,0))

補足

trans()が転置
rowで行、columnで列を抽出。抽出したものはvectorに突っ込めます。
resize(num,num) は列、行の順番。resizeすると元の数に加えて0が増えるようですね。
clearで全部0になっちゃいます。

さぁ君のコードもboostしよう。雪はboostしまくってますが…。