vectors mathisfun fun examples cross c math vector

mathisfun - Recomendaciones para un pequeño vector basado en c y una biblioteca de matriz



vectors math (7)

Pruebe CIMG ( cimg.sourceforge.net) . Está enfocado en el procesamiento de imágenes, pero es gratis, extremadamente liviano (¡la biblioteca completa consta de un único archivo .h!) Y tiene todas las operaciones estándar de vectores / matrices.

Es C ++, por lo que no funcionará si estás haciendo una C recta, pero vale la pena verla.

Necesito una biblioteca liviana para vectores de 2d y 3d y matrices de 3x3 y 4x4. En el básico C. Así que no reinventé la rueda subóptimamente.

¿Alguna sugerencia?


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.


Meschach es una biblioteca de vector / matriz de solo c, significativamente más pequeña que, por ejemplo, LAPACK (según las preguntas frecuentes, al menos :)


Hay muchas opciones en Mathtools.net . Object-Oriented Numerics también enumera algunos paquetes que pueden 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, la Biblioteca de plantillas de Matrix está bastante bien pensada. Y si necesitas un poco de algebra lineal seria, deberías mirar a BLAS y LAPACK .


Tal vez deberías 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. Puedes usar la versión 9 o 10. Es rápido :)

#include <D3DX9Math.h>



Muchas personas te dicen que uses varias librerías BLAS , pero esto probablemente sea muy lento para ti ya que estás trabajando en matrices pequeñas. La mayoría de ellos están optimizados 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 operar los restos con un algoritmo trivial. En matrices pequeñas, esto lo hace aún más lento que llamar al algoritmo trivial.

FWIW, cuando tuve que hacer esto en Fortran (métricas de matriz cuadrada de 2x2 y 4x4) acabo de codificar versiones completamente desenrolladas y funcionó bastante bien (aproximadamente 20 veces la velocidad de MATMUL incorporado en gfortran, pero parte de esto probablemente se debió al hecho que MATMUL no está en su lugar y mi versión era) . Nunca pude encontrar una buena biblioteca para hacer esto por mí.

En C ++ estaría bien, ya que podrías usar BLITZ pero por desgracia ...