Gürteltier (C++-Bibliothek) - Armadillo (C++ library)

Armadillo C++-Bibliothek
Stabile Version
10.5.3 / 1. Juli 2021 ; vor 3 Monaten ( 2021-07-01 )
Geschrieben in C++
Betriebssystem Plattformübergreifend
Verfügbar in Englisch
Typ Softwarebibliothek
Lizenz Apache 2.0 ( Open Source )
Webseite arma .sourceforge .net

Armadillo ist eine Softwarebibliothek für lineare Algebra für die Programmiersprache C++ . Es zielt darauf ab, effiziente und optimierte Basisberechnungen bereitzustellen und gleichzeitig über eine einfache und benutzerfreundliche Oberfläche zu verfügen. Die beabsichtigten Zielbenutzer sind Wissenschaftler und Ingenieure.

Es unterstützt Integer, Gleitkomma ( einfache und doppelte Genauigkeit), komplexe Zahlen und eine Untermenge von trigonometrischen und Statistikfunktionen . Dichte und spärliche Matrizen werden unterstützt. Durch die optionale Integration mit Linear Algebra PACKage ( LAPACK ), Automatically Tuned Linear Algebra Software (ATLAS) und ARPACK werden verschiedene Matrixzerlegungen bereitgestellt . Auch leistungsstarke BLAS/LAPACK-Ersatzbibliotheken wie OpenBLAS und Intel MKL können verwendet werden.

Die Bibliothek verwendet einen Ansatz mit verzögerter Auswertung (während der Kompilierzeit ), um mehrere Operationen zu einer zu kombinieren und den Bedarf an temporären Elementen zu reduzieren (oder zu eliminieren). Gegebenenfalls wird die Reihenfolge der Operationen optimiert. Verzögerte Auswertung und Optimierung werden durch Template-Metaprogrammierung erreicht .

Armadillo ist mit der Bibliothek Boost Basic Linear Algebra Subprograms (uBLAS) verwandt, die auch Template-Metaprogrammierung verwendet . Armadillo baut jedoch auf ATLAS- und LAPACK- Bibliotheken auf und bietet dadurch maschinenabhängige Optimierungen und Funktionen, die in uBLAS nicht vorhanden sind.

Es handelt sich um Open-Source-Software, die unter der freizügigen Apache-Lizenz vertrieben wird , wodurch sie sowohl für die Entwicklung von Open-Source- als auch proprietärer Software geeignet ist . Das Projekt wird vom Forschungszentrum NICTA in Australien unterstützt.

Eine Schnittstelle zur Python-Sprache ist über das PyArmadillo- Paket verfügbar , das das Prototyping von Algorithmen in Python und anschließend die relativ einfache Konvertierung in C++ erleichtert.

Beispiel in C++ 11

Hier ist ein triviales Beispiel, das die Funktionalität von Armadillo demonstriert:

// Compile with:
// $ g++ -std=c++11 main.cpp -o file_name -O2 -larmadillo

#include <iostream>
#include <armadillo>
#include <cmath>

int main()
{
                                                //    ^
  // Position of a particle                     //    |
  arma::vec Pos = {{0},                         //    | (0,1)
                   {1}};                        //    +---x-->

  // Rotation matrix 
  double phi = -3.1416/2; 
  arma::mat RotM = {{+cos(phi), -sin(phi)},
                    {+sin(phi), +cos(phi)}};

  Pos.print("Current position of the particle:");
  std::cout << "Rotating the point " << phi*180/3.1416 << " deg" << std::endl;

  Pos = RotM*Pos;

  Pos.print("New position of the particle:");   //    ^
                                                //    x (1,0)
                                                //    | 
                                                //    +------>

  return 0;
}

Beispiel in C++ 98

Hier ist ein weiteres triviales Beispiel in C++ 98:

#include <iostream>
#include <armadillo>

int main()
{
  arma::vec b;
  b << 2.0 << 5.0 << 2.0;

  // arma::endr represents the end of a row in a matrix
  arma::mat A;
  A << 1.0 << 2.0 << arma::endr
    << 2.0 << 3.0 << arma::endr
    << 1.0 << 3.0 << arma::endr;

  std::cout << "Least squares solution:\n";
  std::cout << arma::solve(A,b) << '\n';

  return 0;
}

Siehe auch

Verweise

Externe Links