Pergunta

Eu estou procurando uma boa (no melhor dos casos mantido ativamente) C ++ matriz biblioteca. Assim, ele deve ser templated, porque eu quero usar um complexo de rationals como tipo numérica. As matrizes o que estou lidando com são principalmente escassa e unitária.

Você pode por favor sugerir bibliotecas e também dar uma pequena explicação por que usá-los, porque eu sei como encontrá-los, mas eu realmente não posso decidir o que é adequado para mim, porque eu estou em falta a experiência com eles.

EDIT:

As principais operações que estou lidando com são A multiplicação de matrizes , multiplicação escalar com um vector e produto de Kronecker . O tamanho das matrizes é exponencial e eu quero pelo menos ser capaz de lidar com matrizes de até 1024x1024 entradas.

Foi útil?

Solução

Muitas pessoas fazendo "séria" material matriz, contam com BLAS , acrescentando LAPACK / ATLAS (matrizes normais) ou UMFPACK (esparsa matrizes) para a matemática mais avançada. A razão é que este código é bem testado, estável, confiável e muito rápido. Além disso, você pode comprá-los diretamente de um fornecedor (por exemplo Intel MKL ) sintonizado para a sua arquitetura, mas também obtê-los gratuitamente. uBLAS mencionado em a resposta de Manuel é provavelmente o padrão C ++ BLAS implementação. E se você precisa de algo como LAPACK mais tarde, há ligações a fazê-lo.

No entanto, nenhuma dessas bibliotecas padrão (BLAS / LAPACK / ATLAS ou uBLAS + ligações + LAPACK / ATLAS) carrapatos sua caixa para ser templated e fácil de usar (a menos que uBLAS é tudo que você precisará nunca). Na verdade, devo admitir, que eu tendem a chamar a interface C / Fortran diretamente quando eu usar uma implementação BLAS / LAPACK, já que muitas vezes eu não vejo muita vantagem adicional na combinação uBLAS + ligações.

Se eu uma necessidade de um uso simples de, de uso geral C ++ biblioteca de matriz, que tendem a usar Eigen (Eu costumava usar NEWMAT no passado) . Vantagens:

  • bastante rápido na arquitetura Intel, provavelmente o mais rápido para matrizes menores
  • interface agradável
  • quase tudo que você espera de uma biblioteca de matriz
  • você pode facilmente adicionar novos tipos

Desvantagens (IMO):

  • single-processador [ Editar: parte fixa na Eigen 3,0 ]
  • mais lento para as matrizes maiores e algum matemática avançada do que ATLAS ou Intel MKL (por exemplo decomposição LU) [ Editar: também melhorou em Eigen 3,0]
  • único suporte experimental para matrizes esparsas. [ Editar: melhorou em próxima versão 3.1]

Editar:. A próxima Eigen 3.1 permite algumas funções para usar o Intel MKL (ou quaisquer outros BLAS / implementação LAPACK)

Outras dicas

uBLAS

impulso , porque ele é passado o filtro Boost.

Existem algumas libs modelo que suportam matrizes esparsas, por isso é muito difícil chegar a uma melhor lógica se você não é mais específico sobre suas necessidades.

Você também deve tentar MLT e Hasem Biblioteca Matrix C ++. O último é muito bem documentado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top