문제

나는 (적극적으로 유지 관리되는 최고의 경우) C ++ 매트릭스 라이브러리를 찾고 있습니다. 따라서 복잡한 합리를 숫자 유형으로 사용하고 싶기 때문에 템플릿이 있어야합니다. 내가 다루고있는 매트릭스는 주로 드문 드문이며 단일입니다.

라이브러리를 제안하고 도서관을 찾는 방법을 알고 있기 때문에 도서관을 사용해야하는 이유를 제시 할 수 있지만, 경험이없는 것이기 때문에 나에게 적합한 것을 실제로 결정할 수는 없습니다.

편집하다:

내가 다루고있는 주요 작업은 다음과 같습니다 매트릭스 곱셈, 벡터를 사용한 스칼라 곱하기 그리고 크로네 커 제품. 행렬의 크기는 지수이며 최소한 1024x1024의 행렬을 다룰 수 있기를 원합니다.

도움이 되었습니까?

해결책

"심각한"매트릭스를하는 많은 사람들이 블라스, 추가 라크 / 아틀라스 (정상 행렬) 또는 움 팩 더 고급 수학을위한 (스파스 행렬). 그 이유는이 코드가 잘 테스트하고 안정적이며 신뢰할 수 있으며 매우 빠르기 때문입니다. 또한 공급 업체로부터 직접 구입할 수 있습니다 (예 : 인텔 MKL) 건축을 향해 조정되었지만 무료로 제공하십시오. ublas 언급 마누엘의 대답 아마도 표준 C ++ BLA 구현 일 것입니다. 그리고 나중에 Lapack과 같은 것이 필요하다면 바인딩 그렇게하려면.

그러나 이러한 표준 라이브러리 (BLAS / LAPACK / ATLAS 또는 UBLAS + BINDING + LAPACK / ATLAS) 중 어느 것도 템플릿이 있고 사용하기 쉬운 상자를 체크합니다 (UBLA가 필요한 모든 것이 아니라면). 실제로, 나는 UBLAS + 바인딩 조합에서 더 많은 이점이 많이 보이지 않기 때문에 BLAS / LaPack 구현을 사용할 때 C / Fortran 인터페이스를 직접 호출하는 경향이 있음을 인정해야합니다.

사용하기 쉬운 일반 목적 C ++ 매트릭스 라이브러리가 필요하다면 사용하는 경향이 있습니다. 고유 (나는 사용했었다 Newmat 과거에). 장점 :

  • 인텔 아키텍처에서 매우 빠르며 아마도 작은 매트릭스에서 가장 빠릅니다.
  • 좋은 인터페이스
  • 매트릭스 라이브러리에서 기대하는 거의 모든 것
  • 쉽게 추가 할 수 있습니다 새로운 유형

단점 (IMO) :

  • 단일 프로세서 [편집하다: 부분적으로 고정되었습니다 아이젠 3.0]
  • 아틀라스 또는 인텔 MKL보다 더 큰 행렬과 일부 고급 수학에 대해 느리게편집하다: 또한 고유 3.0에서도 개선
  • 희소 행렬에 대한 실험적 지원 만 [편집하다: 다가오는 버전 3.1에서 개선].

편집하다: 다가오는 Eigen 3.1을 사용하면 일부 기능이 Intel MKL (또는 다른 BLAS / Lapack 구현)을 사용할 수 있습니다.

다른 팁

ublas를 부스트하십시오, 부스트 필터를 통과했기 때문입니다.

희소 행렬을 지원하는 몇 가지 템플릿 리브가 있으므로 필요에 대해 더 구체적이지 않으면 더 나은 이론적 근거를 생각해 내기가 어렵습니다.

당신은 또한 시도해야합니다 MLT 그리고 Hasem 매트릭스 C ++ 라이브러리. 마지막은 매우 잘 문서화되어 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top