lessthanoptimal/ejml

A fast and easy to use linear algebra library written in Java for dense, sparse, real, and complex matrices.

EJML: 효율적인 Java 행렬 라이브러리

무엇인가

Java용 선형 대수 라이브러리 — 행렬을 다루는 수학 도구 — 100% Java로 작성되었으며 Apache v2.0 라이선스로 무료로 배포됩니다. 실수, 복소수, 밀집, 희소 행렬을 처리합니다.

설계 목표

  • 효율성: 작은 행렬과 큰 행렬 모두에 대해 가능한 한 계산 및 메모리 효율적으로.
  • 접근성: 초보자와 전문가 모두 사용할 수 있습니다.
  • 런타임에 최상의 알고리즘을 선택하고, 깔끔한 API를 제공하며, 여러 인터페이스를 제공함으로써 이러한 목표를 달성합니다.

세 가지 사용 방법

  1. Operations (절차적) — 최하위 수준으로, 메모리, 속도 및 특정 알고리즘을 거의 완전히 제어할 수 있습니다. 절차적 API(행렬에 대한 함수 호출)를 사용합니다.
  2. SimpleMatrix — Jama에서 영감을 받은 단순화되고 사용하기 쉬운 객체 지향 API로, 흐름 스타일 인터페이스를 제공합니다.
  3. Equations — Matlab과 유사한 기호 인터페이스로, 간결한 방정식 문자열을 작성할 수 있습니다.

세 가지 모두 동일한 수학을 수행할 수 있습니다(README에 각 스타일의 칼만 이득 예제가 나와 있습니다).

주요 기능

  • 기본 연산자 — 덧셈, 곱셈 등
  • 행렬 조작 — 추출, 삽입, 결합 등
  • 선형 솔버 — 선형, 최소 제곱, 증분
  • 분해 — LU, QR, Cholesky, SVD, 고유값 등
  • 행렬 특성 — 랭크, 대칭성, 정부호성 등
  • 무작위 행렬 생성 — 공분산, 직교, 대칭
  • 다양한 내부 형식 — 행 우선, 블록, 희소
  • Graph BLAS (세미링)
  • 단일 스레드 및 동시 구현
  • Kotlin 확장
  • 모든 알고리즘에 대한 단위 테스트

품질 및 성능

  • 정확성을 보장하기 위해 광범위하게 단위 테스트됨
  • 내부적으로 그리고 Java Matrix Benchmark와 비교하여 벤치마킹됨
  • 문서는 ejml.org(매뉴얼, JavaDoc)에서 제공

패키지 및 모듈

Maven Central에서 org.ejml:ejml-all:0.46.0으로 사용 가능(또는 개별 모듈을 가져올 수 있음):

모듈 용도
ejml-core 핵심 데이터 구조 및 공통 코드
ejml-fdense 밀집 실수 32비트 부동 소수점 알고리즘
ejml-ddense 밀집 실수 64비트 부동 소수점 알고리즘
ejml-cdense 밀집 복소수 32비트 부동 소수점 알고리즘
ejml-zdense 밀집 복소수 64비트 부동 소수점 알고리즘
ejml-fsparse 희소 실수 32비트 부동 소수점 알고리즘
ejml-dsparse 희소 실수 64비트 부동 소수점 알고리즘
ejml-simple SimpleMatrix 및 Equations 인터페이스
ejml-java9module Java 모듈 시스템(JPMS)용 단일 통합 jar

Java 모듈 시스템 참고: 여러 ejml-* 모듈을 동시에 모듈 경로에 두지 마십시오. 패키지 분할 오류가 발생합니다. 대신 ejml-java9module jar를 사용하십시오.

행렬 유형 명명 규칙

행렬 클래스 이름은 DMatrixRMaj와 같은 패턴을 따릅니다:

  • 첫 번째 문자 = 데이터 유형: D (실수 double), F (실수 float), Z (복소수 double), C (복소수 float), B (이진)
  • 중간 = 구조: RMaj (밀집 행 우선), RBlock (블록), NxN/N (고정 크기), CSC (압축 희소 열), Triplet

예: DMatrixRMaj = double, 실수, 밀집, 행 우선 행렬.

소스에서 빌드

  • Gradle로 빌드됩니다. **Java 17+**가 필요하지만 Java 11 바이트코드를 생성합니다.
  • 명령: ./gradlew autogenerate 그 다음 ./gradlew publishToMavenLocal.
  • 기타 명령: createLibraryDirectory (모든 모듈 jar를 ejml/libraries에 저장) 및 oneJar (모든 것을 단일 EJML.jar로 컴파일).
  • 사전 빌드된 jar는 Maven Central에서 사용할 수 있습니다. 대부분의 사용자는 빌드할 필요가 없습니다.

저장소 구조

  • docs/ — 문서 (오래되었을 수 있음; 온라인이 최신)
  • examples/ — 사용 예제
  • main/ — 라이브러리 소스 코드
  • change.txt — 버전 기록

커뮤니티 및 지원

  • Google 그룹: efficient-java-matrix-library-discuss
  • 이슈 트래커: GitHub issues (github.com/lessthanoptimal/ejml/issues)
  • 크레딧: 저자는 David Watkins(『행렬 계산의 기초』)와 Timothy A. Davis(『희소 선형 시스템의 직접 방법』 및 CSparse, 이는 희소 알고리즘의 시드가 되었습니다)에게 감사합니다.

관련

  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트