Wydajna biblioteka Java Matrix - Efficient Java Matrix Library

Wydajna biblioteka Java Matrix
Pierwotni autorzy Peter Abeles
Wersja stabilna
0,40 / 4 listopada 2020 r . ; 5 miesięcy temu  ( 04.11.2020 )
System operacyjny Wieloplatformowy
Rodzaj Biblioteka
Licencja Apache_License
Stronie internetowej ejml .org

Efficient Java Matrix Library (EJML) to biblioteka algebry liniowej do manipulowania macierzami rzeczywistymi / złożonymi / gęstymi / rzadkimi. Jego cele projektowe to; 1) aby były maksymalnie wydajne pod względem obliczeniowym i pamięciowym zarówno dla małych, jak i dużych macierzy oraz 2) były dostępne zarówno dla nowicjuszy, jak i ekspertów. Cele te są osiągane poprzez dynamiczne wybieranie najlepszych algorytmów do użycia w czasie wykonywania, czysty interfejs API i wiele interfejsów. EJML jest darmowy, napisany w 100% w Javie i został wydany na licencji Apache v2.0.

EJML ma trzy różne sposoby interakcji z nim: 1) proceduralne, 2) prosta macierz i 3) równania. Styl proceduralny zapewnia wszystkie możliwości EJML i prawie całkowitą kontrolę nad tworzeniem macierzy, szybkością i określonymi algorytmami. Styl SimpleMatrix zapewnia uproszczony podzbiór podstawowych możliwości w łatwym w użyciu, zorientowanym obiektowo interfejsie API ze stylem przepływu, zainspirowanym przez JAMA . Styl Equations zapewnia symboliczny interfejs, podobny w duchu do Matlab i innych CAS, który zapewnia zwarty sposób pisania równań.

Możliwości

EJML zapewnia następujące możliwości dla gęstych macierzy.

  • Operatory podstawowe (dodawanie, mnożenie, ...)
  • Manipulacja matrycą (ekstrakcja, wstawianie, łączenie, ...)
  • Solvery liniowe (liniowe, najmniejszych kwadratów, przyrostowe, ...)
  • Rozkłady (LU, QR, Cholesky, SVD, wartość własna, ...)
  • Funkcje macierzy (ranga, symetria, definitywność, ...)
  • Macierze losowe (kowariancja, ortogonalne, symetryczne, ...)
  • Różne formaty wewnętrzne (wiersz-główny, blok)
  • Testów jednostkowych

Przykłady użycia

Styl równania

Obliczanie zysku Kalmana :

eq.process("K = P*H'*inv( H*P*H' + R )");

Styl proceduralny

Obliczanie zysku Kalmana:

mult(H,P,c);
multTransB(c,H,S);
addEquals(S,R);
if( !invert(S,S_inv) )
    throw new RuntimeException("Invert failed");
multTransA(H,S_inv,d);
mult(P,d,K);

Styl SimpleMatrix

Przykład rozkładu według wartości osobliwej (SVD):

SimpleSVD s = matA.svd();
SimpleMatrix U = s.getU();
SimpleMatrix W = s.getW();
SimpleMatrix V = s.getV();

Przykład mnożenia macierzy:

SimpleMatrix result = matA.mult(matB);

DecompositionFactory

Użycie DecompositionFactory do obliczenia rozkładu wartości osobliwej z gęstą dwurzędową macierzą główną (DDRM):

SingularValueDecomposition_F64<DenseMatrix64F> svd = 
    DecompositionFactory_DDRM.svd(true, true, true);

if (!DecompositionFactory.decomposeSafe(svd, matA))
    throw new DetectedException("Decomposition failed.");

DenseMatrix64F U = svd.getU(null, false);
DenseMatrix64F S = svd.getW(null);
DenseMatrix64F V = svd.getV(null, false);

Przykład mnożenia macierzy:

CommonOps_DDRM.mult(matA, matB, result);

Zobacz też

Bibliografia

Linki zewnętrzne