我正在尝试使用特征构造对角矩阵,然后沿对角线设置值:
Eigen::DiagonalMatrix<int, Eigen::Dynamic> diagonal_matrix(5);
for (int i = 0; i < 5; ++i) {
diagonal_matrix(i, i) = i * i + 2;
}
但是,这不起作用,因为diagonal_matrix
缺少()
运算符。使用特征?
答案 0 :(得分:9)
这个运算符不可用,因为我们不得不禁止用i!= j用(i,j)调用它,因此这样的函数没有意义。你必须使用一个更详细的方法,包括采取对角线:
diag_mat.diagonal()[i] = ...;
这里,.diagonal()成员返回对角线的表达式作为1D向量。您也可以使用高级例程设置它,例如线性间隔值的随机值。要重现您的示例:
diag_mat.diagonal() = ArrayXi::LinSpaced(5,0,4).square() + 2;