Armadilloは、 C++プログラミング言語用の線形代数ソフトウェアライブラリです。効率的で合理化された基本計算を提供すると同時に、シンプルで使いやすいインターフェースを備えています。主な対象ユーザーは科学者とエンジニアです。
整数、浮動小数点数(単精度と倍精度)、複素数、および三角関数と統計関数のサブセットをサポートしています。[ 2 ]密行列と疎行列がサポートされています。[ 3 ]さまざまな行列分解は、Linear Algebra PACKage( LAPACK)、Automatically Tuned Linear Algebra Software(ATLAS)、およびARPACKとのオプションの統合によって提供されます。[ 4 ] OpenBLASやIntel MKLなどの高性能なBLAS/LAPACK代替ライブラリも使用できます。
このライブラリは、コンパイル時に遅延評価を行う方式を採用し、複数の操作を1つにまとめて一時変数の必要性を低減(または排除)します。可能な場合は、操作の順序も最適化されます。遅延評価と最適化は、テンプレートメタプログラミングによって実現されます。
Armadilloは、テンプレートメタプログラミングを使用するBoost Basic Linear Algebra Subprograms(uBLAS)ライブラリと関連があります。しかし、ArmadilloはATLASおよびLAPACKライブラリを基盤としているため、uBLASにはないマシン依存の最適化機能や関数を提供します。
これは、寛容なApacheライセンスの下で配布されるオープンソースソフトウェアであり、オープンソースソフトウェアとプロプライエタリソフトウェアの両方の開発に適用可能です。このプロジェクトは、オーストラリアのNICTA研究センターの支援を受けています。
PyArmadilloパッケージ[ 5 ]を通じてPython言語へのインターフェースが利用可能であり 、Pythonでのアルゴリズムのプロトタイプ作成と、比較的簡単なC++への変換を容易にします。
Armadilloは、機械学習ライブラリmlpack [ 6 ]および数値最適化用C++ライブラリensmallen [ 7 ]の中核的な依存関係です。
Armadilloの機能を示す簡単な例を以下に示します。
インポート< armadillo > ;標準をインポートします。using arma :: Col ; using arma :: Mat ;int main () { // ^ // | // | (0,1) // +---x--> // 粒子の位置Col < double > pos = {{ 0 }, { 1 }};// 回転行列double phi = - std :: numbers :: pi / 2 ; Mat < double > m = { { std :: cos ( phi ), - std :: sin ( phi ) }, { std : sin ( phi ), std :: cos ( phi ) } };pos.print ( "粒子の現在の位置:" ) ; std :: println ( "点{}を回転します" , ( phi * 180 ) / std :: numbers :: pi ) ;pos *= m ;pos.print ( "粒子の新しい位置:" ) ; // ^ // x (1,0) // | // +------>return 0 ; }C++98における別の例は次のとおりです。
#include <iostream> #include <armadillo>using std :: cout ;arma :: Colを使用します。arma :: Matを使用します。arma :: endrを使用します。int main () { Col < double > b ; b << 2.0 << 5.0 << 2.0 ;// arma::endr は行列の行の終わりを表しますMat < double > a ; a << 1.0 << 2.0 << endr << 2.0 << 3.0 << endr << 1.0 << 3.0 << endr ;cout << "最小二乗解: \n " << arma :: solve ( A , b ) << '\n' ;return 0 ; }