2008-10-13 9 views
11

Necesito una biblioteca liviana para 2d & vectores 3D y 3x3 & matrices 4x4. En el básico C. Solo para que no reinvente la rueda subóptimamente.Recomendaciones para un pequeño vector basado en c y una biblioteca de matriz

¿Alguna sugerencia?

+0

Ver también: [** ¿Hay un fácil utilizar el vector/matriz/cuaternión biblioteca de matemáticas en C puro? (cerrado) **] (http://stackoverflow.com/questions/12659579/is-there-an-easy-to-use-vector-matrix-quaternion-math-library-in-pure-c) –

Respuesta

8

Meschach es una biblioteca de vector/matriz C-solamente, significativamente menor que, por ejemplo, LAPACK (de acuerdo con las preguntas frecuentes, al menos :)

+0

Si no quiere reinventar la rueda y quiere peso liviano, esto es mejor que la respuesta que se aceptó. –

+0

+1 para Meschach. Es un poco más rápido que Blitz. – Dilawar

1

Suponiendo que está codificando para x86, puede buscar en Intel Integrated Performance Primitives (IPP) y Math Kernel Library (MKL). Estos brindan bibliotecas súper rápidas (probablemente más rápidas que cualquier otra persona podría escribir, ya que están optimizadas para detalles de microarquitectura no públicas) para muchas operaciones comunes, incluidos vectores y matrices.

+4

Son también $ 500 cada uno: C – cjcurrie

0

Hay un montón de opciones en Mathtools.net. Object-Oriented Numerics también enumera algunos paquetes que podrían funcionar para usted. Como no estoy seguro de lo que estás haciendo exactamente (¿necesitas mucho álgebra lineal optimizada? ¿O bastarán las operaciones simples?), Es difícil ser más específico.

En general, el Matrix Template Library está muy bien pensado. Y si necesita algún gruñido de álgebra lineal seria, debería mirar BLAS y LAPACK.

1

Trate CIMG (cimg.sourceforge.net). Es de procesamiento de imagen enfocada, pero es (toda la biblioteca se compone de un único archivo .h!), Y tiene todas las operaciones libres, extremadamente ligeras estándar vector/matriz.

Se es C++, por lo que no funcionará si está trabajando directamente en C, pero vale la pena verlo.

3

Muchas personas le dicen que use varias bibliotecas BLAS, pero esto probablemente sea muy lento para usted desde está trabajando en matrices pequeñas. La mayoría de ellas están optimizadas para dividir la matriz en tamaños fijos (alrededor de 50 elementos -depende del tamaño de la caché) y operar en los fragmentos con un algoritmo optimizado, luego op sobre las sobras con un algoritmo trivial. En matrices pequeñas, esto lo hace aún más lento que llamar al algoritmo trivial.

Fwiw, cuando tenía que hacer esto en FORTRAN (2x2 y 4x4 multiplicadores matriz cuadrada) acabo hardcoded versiones completamente desenrollados y funcionó bastante bien (alrededor de 20 veces la velocidad de la orden interna MATMUL en gfortran, sino que forma parte de esta era probablemente debido al hecho de que MATMUL no está en su lugar y mi versión fue). Nunca pude encontrar una buena biblioteca para hacer esto por mí.

En C++ sería muy bien ya que sería capaz de usar BLITZ pero por desgracia ...

1

Quizás debería probar DirectX math lib (solo Windows ...). Los vectores, las matrices, las operaciones en él, todo lo que necesita probablemente esté allí. Solo puedes usar esto, no todo DX. Puede utilizar la versión 9 o 10. Es rápido :)

#include <D3DX9Math.h> 
-1

También es posible que desee echar un vistazo a la Armadillo C++ library

+2

¿por qué recomendaría una biblioteca de C++ cuando se solicitó específicamente una biblioteca c? – xaxxon

Cuestiones relacionadas