Рекомендации для небольшой векторной и матричной библиотеки на основе c

Мне нужна небольшая библиотека для 2d и 3d векторов и матриц 3x3 и 4x4. В базовом C. Именно поэтому я не изобретаю велосипед неоптимально.

Любые предложения?

Ответ 1

Meschach - это векторная/матричная библиотека c-only, значительно меньшая, чем, например, LAPACK (согласно частому FAQ, по крайней мере:)

Ответ 2

Многие люди говорят вам использовать различные библиотеки BLAS, но это, вероятно, будет очень медленным для вас, поскольку вы работаете над малые матрицы. Большинство из них оптимизированы для блокировки матрицы в фиксированные размеры (около 50 элементов - зависит от размеров кеша) и работают с кусками с оптимизированным алгоритмом, а затем работают с остатками с помощью тривиального алгоритма. На малых матрицах это делает его еще медленнее, чем просто вызов тривиального алгоритма.

FWIW, когда мне нужно было сделать это в fortran (2x2 и 4x4 квадратные матрицы), я просто жестко закодировал полностью развернутые версии, и он работал достаточно хорошо (около 20x скорость встроенного MATMUL на gfortran, но часть этого, вероятно, была вызвана к тому, что MATMUL не на месте, и моя версия была). Я никогда не смог найти хорошую библиотеку, чтобы сделать это для меня.

В С++ это было бы хорошо, так как вы могли бы использовать BLITZ, но, увы...

Ответ 3

Предполагая, что вы кодируете x86, вы можете посмотреть в Intel Интегрированные перформансы производительности (IPP) и Библиотека математического ядра (MKL). Они обеспечивают супер-пупер-быстрые библиотеки (возможно, быстрее, чем кто-либо другой, могут писать, поскольку они оптимизированы для деталей, не относящихся к публичной микроархитектуре) для множества общих операций, включая векторы и матрицы.

Ответ 4

Попробуйте CIMG (cimg.sourceforge.net). Он ориентирован на обработку изображений, но является бесплатным, чрезвычайно легким (вся библиотека состоит из одного файла .h) и имеет все стандартные операции с вектором/матрицей.

Это С++, поэтому он не будет работать, если вы делаете прямой C, но это стоит посмотреть.

Ответ 5

Возможно, вам стоит попробовать DirectX math lib (просто Windows...). Векторы, матрицы, операции на нем, все, что вам нужно, вероятно, есть. Вы можете использовать это, а не целое DX. Вы можете использовать версии 9 или 10. Быстро:)

#include <D3DX9Math.h>

Ответ 6

В Mathtools.net. Объектно-ориентированные числа также перечислены некоторые пакеты, которые могут сработать для вас. Поскольку я не уверен, что вы делаете (вам нужна много оптимизированная линейная алгебра? Или достаточно простых операций?), Трудно быть более конкретным.

В общем, Matrix Template Library довольно хорошо продуман. И если вам нужна серьезная линейная алгебра, вам следует взглянуть на BLAS и LAPACK.