boost -- uBlas矩阵操作

uBLAS是一个C++版本的BLAS,通过STL迭代器接口提供基础线性代数操作,支持向量、矩阵、稀疏和特征矩阵等数据结构。本文介绍如何方便地声明、访问、操作向量和矩阵,并展示求和、范数等关键函数的应用实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值