13

我需要一个用于 2d 和 3d 向量以及 3x3 和 4x4 矩阵的轻量级库。在基本的 C 中。这样我就不会以次优的方式重新发明轮子。

有什么建议么?

4

7 回答 7

9

Meschach是一个纯 c 向量/矩阵库,比例如 LAPACK 小得多(根据常见问题解答,至少 :)

于 2008-10-13T21:19:29.350 回答
4

许多人告诉您使用各种BLAS库,但这对您来说可能会很慢,因为您正在处理小型矩阵。它们中的大多数都经过优化以将矩阵分块为固定大小(大约 50 个元素 - 取决于缓存大小)并使用优化算法对块进行操作,然后使用简单算法对剩余部分进行操作。在小矩阵上,这甚至比仅仅调用普通算法还要慢。

FWIW,当我需要在 fortran(2x2 和 4x4 方矩阵 mults)中执行此操作时,我只是对完全展开的版本进行了硬编码,它运行得很好(大约是 gfortran 上内置 MATMUL 的速度的 20 倍,但这可能是由于以下事实MATMUL 没有到位,我的版本是)。我永远找不到一个好的图书馆来为我做这件事。

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

于 2008-10-13T21:15:21.950 回答
1

假设您正在为 x86 编码,您可能会查看英特尔的集成性能基元(IPP) 和数学内核库(MKL)。它们为许多常见操作(包括向量和矩阵)提供了超级快速的库(可能比其他任何人都快,因为它们针对非公共微架构细节进行了优化)。

于 2008-10-13T20:54:59.337 回答
1

试试 CIMG ( cimg.sourceforge.net)。它专注于图像处理,但免费,非常轻量级(整个库由单个 .h 文件组成!),并具有所有标准矢量/矩阵运算。

它是 C++,所以如果你直接做 C,它就行不通,但值得一看。

于 2008-10-13T21:05:06.167 回答
1

也许您应该尝试 DirectX 数学库(只是 Windows ...)。向量、矩阵、对它的运算,你所需要的可能都在那里。您只能使用这个,而不是整个 DX。您可以使用版本 9 或 10。它很快 :)

#include <D3DX9Math.h>
于 2008-10-23T08:35:14.413 回答
0

Mathtools.net上有很多选择。Object-Oriented Numerics还列出了一些可能对您有用的包。由于我不确定您在做什么(您需要大量优化的线性代数吗?或者简单的运算就足够了?),很难更具体。

一般来说,矩阵模板库是经过深思熟虑的。如果你需要一些严肃的线性代数,你应该看看BLASLAPACK

于 2008-10-13T21:03:17.853 回答
-1

您可能还想看看Armadillo C++ 库

于 2009-10-09T05:39:42.737 回答