基于小型c的矢量和矩阵库的建议

时间:2008-10-13 20:50:46

标签: c math vector

我需要一个2d&的轻量级库。 3d矢量和3x3& 4x4矩阵。在基本C. 因此,我不会再次发明轮子。

有什么建议吗?

7 个答案:

答案 0 :(得分:8)

Meschach是一个仅限c的矢量/矩阵库,明显小于例如LAPACK(根据FAQ,至少:)

答案 1 :(得分:3)

很多人都在告诉你使用各种BLAS库,但由于你正在使用小型矩阵,这对你来说可能会非常慢。它们中的大多数都经过优化,可将矩阵块化为固定大小(大约50个元素 - 取决于缓存大小),并使用优化算法对块进行操作,然后使用简单算法对剩余块进行操作。在小矩阵上,这使得它甚至比调用简单的算法更慢。

FWIW,当我需要在fortran(2x2和4x4方阵矩阵)中执行此操作时,我只是硬编码完全展开的版本并且它运行良好(大约是内置MATMUL在gfortran上的速度的20倍,但是其中的一部分可能是因为MATMUL没有到位且我的版本是。我找不到一个好的图书馆来为我做这件事。

在C ++中它会很好,因为你可以使用BLITZ但是唉......

答案 2 :(得分:1)

假设您正在为x86编码,您可能会查看英特尔的Integrated Performance Primitives(IPP)和Math Kernel Library(MKL)。这些库提供了超级快速的库(可能比其他人编写的更快,因为它们针对非公共微体系结构细节进行了优化),用于许多常见操作,包括向量和矩阵。

答案 3 :(得分:1)

尝试CIMG(cimg.sourceforge.net)。它以图像处理为重点,但是免费,非常轻量级(整个库由单个.h文件组成!),并且具有所有标准的矢量/矩阵操作。

这是C ++,所以如果你做直C,它将无法工作,但值得一看。

答案 4 :(得分:1)

也许你应该尝试使用DirectX math lib(只是Windows ...)。矢量,矩阵,操作,你需要的只是那里。你只能使用它,而不是整个DX。您可以使用版本9或10.它很快:)

#include <D3DX9Math.h>

答案 5 :(得分:0)

Mathtools.net有很多选项。 Object-Oriented Numerics还列出了一些可能适合您的软件包。因为我不确定你到底在做什么(你需要大量优化的线性代数吗?或者简单的操作是否足够?),很难更具体。

一般来说,Matrix Template Library是非常好的想法。如果你需要一些严肃的线性代数咕噜声,你应该看看BLASLAPACK

答案 6 :(得分:-1)

您可能还想查看Armadillo C++ library