2009-12-07 23 views
8

¿Qué biblioteca usa para arreglos N-dimensionales?Una biblioteca C++ para Arrays, Matriz, Vector y operaciones clásicas de álgebra lineal

Uso blitz ++ en el trabajo y realmente no me gusta algún aspecto del mismo. Algunos aspectos son incluso peligrosos. La necesidad de cambiar el tamaño antes de usando operator =. A (Range :: all(), Range :: all()) arroja una matriz (0,0) , etc. y las operaciones de álgebra lineal deben ser realizadas a través de clapack.

Utilicé y amé eigen. Aprecio sus implementaciones "todo-en-header", el azúcar sintáctica el C++, y la presencia de todas las operaciones de álgebra lineal que necesito (la multiplicación de matrices, la resolución del sistema, cholesky ...)

¿Qué estás usando ?

+0

Me da la sensación de que está preguntando qué bibliotecas utilizan las personas para matrices matemáticas, no "matrices C++"? Si es así, debería considerar ser más específico en su pregunta :) – larsmoa

+0

¿Por qué querría "operaciones básicas de matriz" para matrices? Quizás su pregunta debería ser acerca de las clases * matrix * entonces. – jalf

+0

¿qué pasa con algo así como clapack? (¿o por qué es demasiado "contundente"?) No está claro qué es lo que estás buscando. – jalf

Respuesta

7

boost::array y también boost::MultiArray. También hay un buen paquete de álgebra lineal en boost llamado uBLAS

+2

o std :: array, si está utilizando gcc con -std = C++ 0x – coelhudo

+0

las multiarrays de impulso son poco frecuentes, consulte http://stackoverflow.com/questions/446866/boostmultiarray-performance-question – denis

3

También hay armadillo que estoy usando en algunos proyectos. Desde su página web:

Armadillo es una biblioteca de álgebra lineal C++ (matriz de matemáticas) esforzarse por lograr un buen equilibrio entre la velocidad y la facilidad de uso de . Se admiten números enteros, coma flotante y , así como como un subconjunto de funciones de estadísticas trigonométricas y . Se proporcionan varias descomposiciones de la matriz a través de la integración opcional con las bibliotecas ATLAS de LAPACK y .

con retraso se emplea enfoque de evaluación (durante el tiempo de compilación) para combinar varias operaciones en una y reducir (o eliminar) la necesidad de temporales. Esto se realiza a través de plantillas recursivas y metaprogramación de plantillas .

Esta biblioteca es útil si C++ se ha decidido que el idioma de su elección (debido a la velocidad y/o la integración capacidades), en lugar de otro idioma como el Matlab ® o de octava. Es se distribuye bajo una licencia que es útil en ambos contextos comerciales de código abierto y .

Armadillo se desarrolla principalmente en NICTA (Australia), con contribuciones de todo el mundo.

+1

+1 se ve bien, "buen equilibrio". ¿Alguien ha comparado su velocidad con blitz, numpy ... como en www.scipy.org/PerformancePython laplace.py? – denis

+1

+1 para la necesidad de comparaciones empíricas. Necesitamos algún tipo de biblioteca para que uno pueda comenzar a recopilar resultados para diferentes compiladores, sistemas operativos, ... –

2

Hemos usado TNT con éxito durante varios años. Sin embargo, hay suficientes problemas que nos estamos moviendo hacia una solución desarrollada internamente. Los dos puntos más importantes para nosotros son que

  • Las matrices no son seguras para subprocesos, incluso para el acceso de lectura, ya que utilizan un recuento de referencias no seguro de subprocesos.
  • Las matrices causan todo tipo de problemas cuando se escribe el código correcto.

Si eso no es un problema, son bastante convenientes para muchas tareas de matriz comunes.

Cuestiones relacionadas