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 件のコメント:
コメントを投稿