C++线性代数库Armadillo
2015-06-21 10:57
253 查看
做机器学习的同学一定对Matlab矩阵运算的简洁高效映像深刻,并且已经习以为常这种便捷。但实际工作中,我们经常需要将matlab代码移植成C/C++。
C++下的线性代数库诸如lapack, openblas之类接口生涩,例如矩阵乘法接口,eigen库又显得过于庞大。因此我一直在寻找一个接口简洁,同时对windows友好的轻量级C++线性代数库,直到我发现了这个:
Amradillo C++线性代数库: http://arma.sourceforge.net/
Amradillo的名字来自于"犰狳", 一种浑身鳞甲的小动物,Amaradillo的底层计算依赖于Lapack, 高性能计算则可以指定MKL或者openblas支持,对于上层使用者而言,Amradillo的接口非常友好,例如你可以直接采用+-*/运算符来操作矩阵:
mat A = randu<mat>(5,10); mat B = randu<mat>(5,10); mat C = randu<mat>(10,5); mat P = A + B; mat Q = A - B; mat R = -B; mat S = A / 123.0; mat T = A % B; mat U = A * C; // V is constructed without temporaries mat V = A + B + A + B; imat AA = "1 2 3; 4 5 6; 7 8 9;"; imat BB = "3 2 1; 6 5 4; 9 8 7;"; // compare elements umat ZZ = (AA >= BB);
以下代码展示了一个求解线性方程组的调用过程(在matlab中,这相当于求解X=A\B)
mat A = randu<mat>(5,5); vec b = randu<vec>(5); mat B = randu<mat>(5,5); vec x = solve(A, b); mat X = solve(A, B); vec x2; bool status = solve(x2, A, b);
armadillo库一直在更新,截止这篇博文撰写时,最新的版本是5.20,发布时间是2015-5-24。
相关文章推荐
- 【读书笔记:C++ primer plus 第六版 中文版】第2章:开始学习C++
- C++构造函数中抛出的异常
- Effective C++ 条款6
- C++ 与 C
- C++语言基础 例程 字符串类
- C++语言基础 例程 函数模板
- C++语言基础 例程 函数重载
- C++语言基础 例程 有默认参数的函数
- C++语言基础 例程 内置函数
- 3D dungeon
- C++语言基础 例程 C++中的输入和输出
- C++语言基础 例程 C++的数据类型和运算符
- Effective C++ 条款5
- C语言宏定义
- assert用法,原理,改编(C++)
- Elements of Modern C++ Style
- C++ stderr/stdout 重定向到文件
- Effective c++ 3/e item 15 疑問解惑
- OpenCV+C++ 视频图片相互转换
- 【学习笔记】【C语言】char类型