假设我有一个ArrayXXf(或MatrixXf) m。在 for 循环的每次迭代中,我想m用VectorXf.
Eigen::ArrayXXf m(5, 5);
for (int i = 0; i < 5; i++)
{
Eigen::VectorXf vec(5);
vec << i, i + 1, i + 2, i+3, i+4;
//fill m row wise
// in matlab I will do something like m(i,:) = vec;
// in numpy this will looks like m[i:] = vec;
// that means when i is 0 m looks like
// [ 0 1 2 3 4 5
// - - - - - -
// - - - - - -
// - - - - - -
// - - - - - -]
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能在 Eigen 中实现这一目标?
为了简化@Kunal的答案,您可以直接修改数组(或矩阵)的行(或列),而无需创建临时向量。在您的示例中,您可以使用.setLinSpaced():
Eigen::ArrayXXf m(5, 5);
for (int i = 0; i < 5; i++) {
m.row(i).setLinSpaced(i,i+4); //.col(i) would be slightly more efficient
}
Run Code Online (Sandbox Code Playgroud)
或使用逗号初始值设定项:
for (int i = 0; i < 5; i++) {
m.row(i) << i, i+1, i+2, i+3, i+4;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3121 次 |
| 最近记录: |