c ++中的矩阵类

时间:2009-08-14 22:19:04

标签: c++ math matrix linear-algebra

我正在做一些线性代数数学,并且正在寻找一些非常轻巧且易于使用的矩阵类,它可以处理不同的维度:基本上是2x2,2x1,3x1和1x2。 我认为这样的类可以用模板实现,并且在某些情况下使用一些特殊化来提高性能。 有人知道可以使用的任何简单实现吗?我不想要“臃肿”的实现,因为我将在内存受限的嵌入式环境中运行它。

由于

8 个答案:

答案 0 :(得分:6)

您可以尝试Blitz++ - 或Boost's uBLAS

答案 1 :(得分:5)

我最近看过各种C ++矩阵库,我的投票是Armadillo

  • 图书馆模仿严重且仅限标题。
  • Armadillo还利用模板实现延迟评估框架(在编译时解决),以最大限度地减少生成代码中的临时值(导致内存使用量减少和性能提升)。
  • 然而,这些高级功能只是编译器的负担而不是嵌入式环境中运行的实现,因为大多数Armadillo代码在编译期间由于其基于模板的设计方法而“蒸发”。
  • 尽管如此,其主要设计目标之一是易用性 - API在风格上与Matlab语法类似(参见网站上的比较表)。

此外,虽然Armadillo可以独立工作,但您可能需要考虑将其与LAPACK(和BLAS)实现一起使用以提高性能。一个很好的选择是例如OpenBLAS(或ATLAS)。查看Armadillo's FAQ,它涵盖了一些重要主题。

在Google上快速搜索this presentation,显示Armadillo已用于嵌入式系统。

答案 2 :(得分:1)

std :: valarray相当轻巧。

答案 3 :(得分:1)

我使用Newmat libraries进行矩阵计算。它是开源的,易于使用,虽然我不确定它是否符合您对轻量级的定义(它包含50多个源文件,Visual Studio将其编译为1.8MB静态库)。

答案 4 :(得分:1)

CML矩阵非常好,但对于嵌入式环境来说可能不够轻量级。无论如何,请查看它:http://cmldev.net/?p=418

答案 5 :(得分:1)

另一种选择,可能为时已晚:

https://launchpad.net/lwmatrix

答案 6 :(得分:0)

我一个人找不到足够简单的库,所以我自己写了:http://koti.welho.com/aarpikar/lib/

我认为它应该能够通过简单地将一些行或列设置为零来处理不同的矩阵尺寸(2x2,3x3,3x1等)。它不会是最快的方法,因为内部所有操作都将使用4x4矩阵完成。虽然理论上可能存在那种能够在一个滴答中处理4x4操作的处理器。至少我宁愿​​相信存在这样的处理器,而不是优化那些低级矩阵计算。 :)

答案 7 :(得分:-1)

如何将矩阵存储在数组中,如

2x3 matrix = {2,3,val1,val2,...,val6}

这非常简单,加法操作也很简单。但是,您需要编写自己的乘法函数。