从另一个子向量或子矩阵创建 boost::numeric::ublas 向量

Creating boost::numeric::ublas vector from another subvector or submatrix

我正在尝试从另一个子矩阵或子向量创建一个向量。我试过以下但收到此错误 error: no match for ‘operator=’

 int m_size = 10; 
 boost::numeric::ublas::matrix<double> u_a(m_size, m_size);
  boost::numeric::ublas::vector<double> u_v(m_size);

    for (int i = 0; i < m_size; i = i + 1 ){
        for (int j = 0; j < m_size; j++ ){
         double rand1 = (rand()%10+1) +  ((double) rand() / (RAND_MAX));
         u_a(i,j) = rand1;
    }
    double rand3 = (rand()%10+1) +  ((double) rand() / (RAND_MAX));
    u_v(i) = rand3;
    }

for (int i = 0; i < m_size; i = i + 1 ){
  boost::numeric::ublas::matrix<double> u_p(i, i);
  boost::numeric::ublas::vector<double> u_v2(i);
  u_p = subrange(u_a, 0, i, 0, i); 
  // I have tried following two   
  //u_v2 = subrange(u_a, 0,1,0,5);
  //u_v2 = subrange(u_v, 1,i); 
 }

这一行的问题:

u_v2 = subrange(u_a, 0,1,0,5);

是矩阵的subrange是矩阵表达式,不是向量表达式,你赋值给向量。您可以使用 row() 自由函数来执行所需的转换:

u_v2 = row(subrange(u_a, 0, 1, 0, 5), 0);

这一行:

u_v2 = subrange(u_v, 1,i); 

编译正常,但因运行时错误而失败。这是因为在初始迭代中,请求的范围从 1 到 0,这是无效的。如果你想要从索引 1 开始的 i - 1 个元素的子向量,你可以这样做:

u_v2 = subrange(u_v, 1, 1 + i); 

Live at CoLiRu