Pregunta

Busco un bien (en el mejor de los casos se mantiene activa) C ++ biblioteca de la matriz. Por lo tanto debe ser templated, porque quiero usar un conjunto de números racionales de tipo numérico. Las matrices de lo que trato son principalmente escasa y unitario.

Se puede sugerir por favor bibliotecas y también dar una pequeña explicación por qué usarlos, porque sé cómo encontrarlos, pero realmente no se puede decidir lo que es adecuado para mí porque me falta la experiencia con ellos.

EDIT:

Las principales operaciones que trato son multiplicación de matrices , multiplicación escalar con un vector y producto de Kronecker . El tamaño de las matrices es exponencial y quiero al menos ser capaz de hacer frente a las matrices de hasta 1024x1024 entradas.

¿Fue útil?

Solución

Muchas personas haciendo cosas matriz de "grave", se basan en BLAS , añadiendo LAPACK / ATLAS (matrices normales) o UMFPACK (escasa matrices) para matemáticas más avanzadas. La razón es que este código está bien probado, estable, fiable, y bastante rápido. Además, se pueden comprar directamente de un proveedor (por ejemplo, Intel MKL ) sintonizado hacia su arquitectura, sino también obtener de forma gratuita. uBLAS mencionado en Manuel respuesta es probablemente la aplicación estándar de C ++ Blas. Y si necesita algo así como LAPACK más adelante, hay fijaciones para hacerlo.

Sin embargo, ninguna de estas bibliotecas estándar (BLAS / LAPACK / ATLAS o uBLAS + fijaciones + LAPACK / ATLAS) garrapatas su caja para ser con plantilla y fácil de usar (a menos uBLAS es todo lo que necesitas). En realidad, debo admitir, que tiendo a llamar a la interfaz C / Fortran directamente cuando se utiliza una aplicación BLAS / LAPACK, ya que a menudo no ven la ventaja adicional tanto en la combinación uBLAS + fijaciones.

Si una necesidad a-simple de usar, de propósito general biblioteca matriz C ++, que tienden a utilizar Eigen (solía usar NEWMAT en el pasado) . Ventajas:

  • bastante rápido en la arquitectura Intel, probablemente la más rápida de las matrices más pequeños
  • interfaz agradable
  • casi todo lo que se espera de una biblioteca de matriz
  • usted puede agregar fácilmente nuevos tipos

Desventajas (IMO):

  • solo procesador [ Editar: parte fija en Eigen 3,0 ]
  • más lento para matrices más grandes y algo de matemáticas avanzado que ATLAS o Intel MKL (por ejemplo LU descomposición) [ Editar: también mejorado en Eigen 3,0]
  • único apoyo experimental para matrices dispersas [ Editar: mejorado en próxima versión 3.1].

Editar La próxima Eigen 3.1 permite algunas funciones que utilizará el procesador Intel MKL (o cualquier otra aplicación BLAS / LAPACK)

.

Otros consejos

alzar uBLAS , porque ha pasado el filtro Boost.

Hay algunas bibliotecas de plantillas que soportan matrices dispersas, así que es muy difícil llegar a una mejor justificación si no eres más específico acerca de sus necesidades.

También debe tratar MLT y Hasem La matriz C ++ Library. El último de ellos está muy bien documentada.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top