从另一个子向量或子矩阵创建 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);
我正在尝试从另一个子矩阵或子向量创建一个向量。我试过以下但收到此错误 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);