3

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

谢谢

4

8 回答 8

6

你可以试试Blitz++ ——或者Boost 的 uBLAS

于 2009-08-14T22:23:50.670 回答
5

我最近查看了各种 C++ 矩阵库,我投票给了Armadillo

  • 该库是大量模板化的,并且只有标题。
  • Armadillo 还利用模板来实现延迟评估框架(在编译时解决),以最大限度地减少生成代码中的临时性(从而减少内存使用并提高性能)。
  • 但是,这些高级功能只是编译器的负担,而不是您在嵌入式环境中运行的实现,因为大多数 Armadillo 代码在编译期间由于其基于模板的设计方法而“蒸发”。
  • 尽管如此,它的主要设计目标之一是易于使用——API 在风格上刻意与 Matlab 语法相似(参见网站上的比较表)。

此外,虽然犰狳可以独立工作,但您可能需要考虑将其与可用于提高性能的 LAPACK(和 BLAS)实现一起使用。例如OpenBLAS(或ATLAS)是一个不错的选择。检查犰狳的常见问题解答,它涵盖了一些重要的主题。

在 Google 上进行快速搜索发现了这个演示文稿,显示 Armadillo 已经在嵌入式系统中使用。

于 2012-11-12T21:59:56.047 回答
1

CML矩阵相当不错,但对于嵌入式环境来说可能不够轻量级。无论如何都要检查一下:http ://cmldev.net/?p=418

于 2009-08-14T23:42:07.177 回答
1

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

于 2009-08-14T23:01:53.760 回答
1

std::valarray 非常轻量级。

于 2009-08-14T22:28:12.283 回答
1

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

https://launchpad.net/lwmatrix

于 2011-12-06T01:00:28.820 回答
0

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

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

于 2009-08-15T12:02:57.430 回答
-1

将矩阵存储在数组中怎么样,比如

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

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

于 2009-08-20T17:07:56.410 回答