C/C++ 数学

【C++】行列演算ライブラリEigen

更新日:

スポンサードリンク

デフォルトのCやC++には行列やベクトルなどの演算ライブラリはありません。なので行列計算などをしようと思ったら自作するか、ライブラリを探すかということになります。

勉強の一環ならともかく自作となると非常に手間がかかってしまうので極力ライブラリに任せてしまいたいところです。特に単純な四則演算だけでなく逆行列、固有値問題、非線形最小二乗法…などなどを使おうとしているならなおさら大変だと思います。

そこで『Eigen(アイゲン)』というライブラリを使うとほとんどの数学的処理問題を解決することができます。


↑Eigenのページ

このライブラリは比較的最近(2008ごろ~)できた新しいものなのですが、Googleの機械学習などで使われているようです。また、このライブラリの特徴は用いているアルゴリズムがベストなものを使っており、その他最適化を行っているため演算スピードがかなり高速なところらしいです。

ライセンスは『MPL』というライセンスで本家サイトの一部を引用します。ライセンス関係は全然詳しくないので各自確認をお願いします。

Virtually any software may use Eigen. For example, closed-source software may use Eigen without having to disclose its own source code. Many proprietary and closed-source software projects are using Eigen right now, as well as many BSD-licensed projects.

また、チュートリアルも用意されているのでそちらで使いかたをマスターすることができます。

例えば行列の掛け算のサンプル

#include <iostream>
#include <Eigen/Dense>
using namespace Eigen;
int main()
{
Matrix2d mat;
mat << 1, 2,
3, 4;
Vector2d u(-1,1), v(2,0);
std::cout << "Here is mat*mat:\n" << mat*mat << std::endl;
std::cout << "Here is mat*u:\n" << mat*u << std::endl;
std::cout << "Here is u^T*mat:\n" << u.transpose()*mat << std::endl;
std::cout << "Here is u^T*v:\n" << u.transpose()*v << std::endl;
std::cout << "Here is u*v^T:\n" << u*v.transpose() << std::endl;
std::cout << "Let's multiply mat by itself" << std::endl;
mat = mat*mat;
std::cout << "Now mat is mat:\n" << mat << std::endl
}
Here is mat*mat:
7 10
15 22
Here is mat*u:
1
1
Here is u^T*mat:
2 2
Here is u^T*v:
-2
Here is u*v^T:
-2 -0
2 0
Let's multiply mat by itself
Now mat is mat:
7 10
15 22

ただ、今のところ日本語版の公式ページがなさそうというのが欠点です…

スポンサードリンク

-C/C++, 数学

Copyright© めめんと , 2019 All Rights Reserved Powered by AFFINGER5.