uBLAS是一个C++版本的BLAS,可通过STL迭代器接口访问,BLAS是一个著名的Fortran程序包(Basic Linear Algebra Subprograms基础线性代数程序集 )
。它提供稀疏向量、单位向量、稠密向量的代码。未来还将包括稀疏矩阵、特征矩阵、三角矩阵,对称矩阵、厄米特矩阵和稠密矩阵。
uBLAS实现了基础的向量与矩阵线性代数操作:不同范数、加减、乘积、内外积、矩阵向量积和三角解法。
(1)uBLAS建立向量或矩阵相当方便。例如,声明一个double向量:vector<double> myVec(unsigned int dim, double x),其中dim是向量维数,x是缺省参数,
可以不要。显然,这是一个模板类,<double>可以换成其他类型。
(2)可以通过myVec(i)或者myVec[i]访问向量成员。
(3)特殊向量也可以被创建,比如单位向量unit_vector<double> myUnitVec(unsigned int dim)、零向量zero_vector<double> myZeroVec(unsigned int dim)等。
(4)向量求和以及求范数操作示例:
#include <boost/numeric/ublas/vector.hpp>
#include <boost/numeric/ublas/io.hpp>
using namespace boost::numeric::ublas;
void vecOperation1(){
vector<double> myVec(3, 2.2);
myVec[2] = -5.1;
std::cout << myVec << std::endl;
std::cout << sum(myVec) << std::endl;
std::cout << norm_1(myVec) << std::endl;
std::cout << norm_2(myVec) << std::endl;
std::cout << norm_inf(myVec) << std::endl;
std::cout << index_norm_inf(myVec) << std::endl;
}
上面用到的函数:
norm_1 (x) sum |xi| 计算实数向量的l1(sum) 基。
norm_2 (x) sqrt (sum |xi|2 ) 计算一个向量的 linf (euclidean) 基。
norm_inf (x),index_norm_inf (x) max |xi| 计算一个向量的l2 (maximum) 基,BLAS 计算第一个包含这个值的元素的下标
这个程序的输出是:
[3](2.2,2.2,-5.1)
-0.7
9.5
5.97411
5.1
2