我正在做一些线性代数数学,并且正在寻找一些真正轻量级且易于使用的矩阵类,它们可以处理不同的维度:基本上是 2x2、2x1、3x1 和 1x2。我认为这样的类可以用模板实现,并且在某些情况下使用一些专业化来提高性能。有人知道任何可用的简单实现吗?我不想要“臃肿”的实现,因为我将在内存受限的嵌入式环境中运行它。
谢谢
我正在做一些线性代数数学,并且正在寻找一些真正轻量级且易于使用的矩阵类,它们可以处理不同的维度:基本上是 2x2、2x1、3x1 和 1x2。我认为这样的类可以用模板实现,并且在某些情况下使用一些专业化来提高性能。有人知道任何可用的简单实现吗?我不想要“臃肿”的实现,因为我将在内存受限的嵌入式环境中运行它。
谢谢
你可以试试Blitz++ ——或者Boost 的 uBLAS
我最近查看了各种 C++ 矩阵库,我投票给了Armadillo。
此外,虽然犰狳可以独立工作,但您可能需要考虑将其与可用于提高性能的 LAPACK(和 BLAS)实现一起使用。例如OpenBLAS(或ATLAS)是一个不错的选择。检查犰狳的常见问题解答,它涵盖了一些重要的主题。
在 Google 上进行快速搜索发现了这个演示文稿,显示 Armadillo 已经在嵌入式系统中使用。
CML矩阵相当不错,但对于嵌入式环境来说可能不够轻量级。无论如何都要检查一下:http ://cmldev.net/?p=418
我使用Newmat 库进行矩阵计算。它是开源的且易于使用,尽管我不确定它是否符合您对轻量级的定义(它包括 50 多个源文件,Visual Studio 将其编译成一个 1.8MB 的静态库)。
std::valarray 非常轻量级。
另一种选择,虽然可能为时已晚:
我一个人找不到足够简单的库,所以我自己写了:http: //koti.welho.com/aarpikar/lib/
我认为它应该能够通过简单地将一些行或列设置为零来处理不同的矩阵尺寸(2x2、3x3、3x1 等)。这不是最快的方法,因为内部所有操作都将使用 4x4 矩阵完成。尽管理论上可能存在一种可以一次性处理 4x4 操作的处理器。至少我宁愿相信存在这样的处理器,而不是去优化那些低级矩阵计算。:)
将矩阵存储在数组中怎么样,比如
2x3 matrix = {2,3,val1,val2,...,val6}
这真的很简单,加法操作也很简单。但是,您需要编写自己的乘法函数。