【问题标题】:Recommendations for a small c-based vector and matrix library [closed]对基于 c 的小型向量和矩阵库的建议 [关闭]
【发布时间】:2008-10-13 20:50:45
【问题描述】:

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

有什么建议吗?

【问题讨论】:

标签: c math vector


【解决方案1】:

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

【讨论】:

  • 如果您不想重新发明轮子并且想要轻量级,这比接受的答案要好。
  • +1 为 Meschach。它比闪电战略快。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 它们也是 500 美元一个:C
    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

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

      #include <D3DX9Math.h>
      

      【讨论】:

        【解决方案6】:

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

        一般来说,Matrix Template Library 是经过深思熟虑的。如果你需要一些严肃的线性代数,你应该看看BLASLAPACK

        【讨论】:

          【解决方案7】:

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

          【讨论】:

          • 当有人专门要求一个 c 库时,为什么你会推荐一个 c++ 库?
          猜你喜欢
          • 2021-10-25
          • 2013-02-13
          • 2015-05-07
          • 2014-03-19
          • 2011-06-17
          • 1970-01-01
          • 2014-06-11
          • 2013-06-18
          • 1970-01-01
          相关资源
          最近更新 更多