如何使用Boost uBLAS填充C++中创建的矩阵与向量?
Boost uBLAS 填充指定值的矩阵与向量
你可以通过以下几种方式给Boost uBLAS的矩阵和向量填充指定数值:
方法一:逐个元素赋值
直接通过矩阵的(行索引, 列索引)、向量的(索引)运算符逐个赋值,索引从0开始:
#include <boost/numeric/ublas/matrix.hpp> #include <boost/numeric/ublas/vector.hpp> #include <boost/numeric/ublas/io.hpp> #include <iostream> using namespace boost::numeric::ublas; int main() { matrix<double> m1(5, 5); vector<double> v1(5); // 填充矩阵m1 m1(0, 0) = 2; m1(0, 1) = 1; m1(0, 2) = 4; m1(0, 3) = 6; m1(0, 4) = 3; m1(1, 0) = 8; m1(1, 1) = 2; m1(1, 2) = 0; m1(1, 3) = 1; m1(1, 4) = 4; m1(2, 0) = 7; m1(2, 1) = 3; m1(2, 2) = 2; m1(2, 3) = 4; m1(2, 4) = 7; m1(3, 0) = 1; m1(3, 1) = 2; m1(3, 2) = 0; m1(3, 3) = 9; m1(3, 4) = 3; m1(4, 0) = 2; m1(4, 1) = 6; m1(4, 2) = 4; m1(4, 3) = 3; m1(4, 4) = 1; // 填充向量v1 v1(0) = 2; v1(1) = 3; v1(2) = 1; v1(3) = 7; v1(4) = 6; std::cout << m1 << std::endl; std::cout << v1 << std::endl; return 0; }
方法二:批量复制赋值(更简洁)
如果你的编译器支持C++11及以上标准,可以用数组结合std::copy批量赋值,避免重复代码:
#include <boost/numeric/ublas/matrix.hpp> #include <boost/numeric/ublas/vector.hpp> #include <boost/numeric/ublas/io.hpp> #include <iostream> #include <algorithm> using namespace boost::numeric::ublas; int main() { matrix<double> m1(5, 5); vector<double> v1(5); // 按行顺序定义矩阵元素数组 double mat_data[] = {2,1,4,6,3, 8,2,0,1,4, 7,3,2,4,7, 1,2,0,9,3, 2,6,4,3,1}; // 批量复制到矩阵(Boost uBLAS矩阵默认行优先存储) std::copy(std::begin(mat_data), std::end(mat_data), m1.data().begin()); // 向量批量赋值 double vec_data[] = {2,3,1,7,6}; std::copy(std::begin(vec_data), std::end(vec_data), v1.data().begin()); std::cout << m1 << std::endl; std::cout << v1 << std::endl; return 0; }
注意事项
- Boost uBLAS的矩阵默认采用行优先存储,所以按行排列的元素数组可以直接复制到矩阵中。
- 所有索引从0开始,和C++数组索引规则一致,注意不要出现越界访问。
内容的提问来源于stack exchange,提问作者nino dragičević
相关产品推荐
相关产品推荐

