Рекомендации для небольшой векторной и матричной библиотеки на основе c
Мне нужна легкая библиотека для 2d и 3d векторов и матриц 3x3 и 4x4. В базовом C. Просто я не изобретаю колесо неоптимально.
Какие-либо предложения?
7 ответов
Meschach является векторно-матричной библиотекой c-only, значительно меньшей, чем, например, LAPACK (согласно FAQ, по крайней мере:)
Многие люди говорят вам использовать различные библиотеки BLAS, но это, вероятно, будет очень медленным для вас, так как вы работаете с небольшими матрицами. Большинство из них оптимизированы для разбиения матрицы на фиксированные размеры (около 50-ти элементов - зависит от размеров кэша) и работают с кусками с оптимизированным алгоритмом, а затем работают с остатками с помощью тривиального алгоритма. На маленьких матрицах это делает это даже медленнее, чем просто вызов тривиального алгоритма.
Кстати, когда мне нужно было сделать это в Fortran (квадратные матричные матрицы 2x2 и 4x4), я просто жестко закодировал полностью развернутые версии, и это работало достаточно хорошо (примерно в 20 раз быстрее, чем встроенный MATMUL в gfortran, но отчасти это было связано с тем, что что MATMUL не на месте и моя версия была). Я никогда не мог найти хорошую библиотеку, чтобы сделать это для меня.
В C++ это было бы хорошо, так как вы могли бы использовать BLITZ, но увы...
Предполагая, что вы пишете код для x86, вы можете заглянуть в Intel Integrated Performance Primitives (IPP) и Math Kernel Library (MKL). Они предоставляют супер-быстрые библиотеки (возможно, быстрее, чем кто-либо другой мог бы написать, поскольку они оптимизированы для непубличных деталей микроархитектуры) для множества общих операций, включая векторы и матрицы.
Возможно, вам стоит попробовать математическую библиотеку DirectX (только Windows...). Векторы, матрицы, операции над ним, все, что вам нужно, это, вероятно, там. Вы можете использовать только это, а не весь DX. Вы можете использовать версию 9 или 10. Это быстро:)
#include <D3DX9Math.h>
Попробуйте CIMG ( http://cimg.sourceforge.net/. Он ориентирован на обработку изображений, но он бесплатный, чрезвычайно легкий (вся библиотека состоит из одного файла.h!) И имеет все стандартные операции вектор / матрица.
Это C++, поэтому он не сработает, если вы делаете прямой C, но это стоит посмотреть.
Есть много вариантов на Mathtools.net. В объектно-ориентированных числах также перечислены некоторые пакеты, которые могут вам подойти. Поскольку я точно не знаю, что вы делаете (вам нужно много оптимизированной линейной алгебры? Или будет достаточно простых операций?), Сложно быть более конкретным.
В общем, библиотека шаблонов матриц довольно хорошо продумана. И если вам нужна серьезная критика линейной алгебры, вам стоит взглянуть на BLAS и LAPACK.