在Eigen中,asDiagonal
函数使用向量创建对角矩阵。
此函数仅将向量的元素放在主对角线上。
有没有一种快速方法可以在第k个对角线上创建带有向量元素的稀疏矩阵?
对于密集矩阵的例子,对于主要对象上方的对角线使用正指数,对于下面的对角线使用负指数,我预计:
Vector3i(2,5,6).asDiagonal(-1);
生产:
0 0 0 0
2 0 0 0
0 5 0 0
0 0 6 0
但是asDiagonal
没有争论
我知道一种方法可以做我想要的,假设n
是向量vect
的长度和对角线索引的d
:
MartixXd m(n+abs(d),n+abs(d));
for (unsigned int i = 0; i < n; ++i)
m.diagonal(d)[i] = vect(i);
但不幸的是,它对稀疏矩阵不起作用......
所以我最终得到了这个:
SparseMatrix<double> m(n+abs(d),n+abs(d));
m.reserve(n);
if (d < 0)
{
for (unsigned int l = 0; l < n; l++)
m.coeffRef(l-d,l) = vect.coeffRef(l);
} else {
for (unsigned int l = 0; l < n; l++)
m.coeffRef(l,l+d) = vect.coeffRef(l);
}
有更快和/或更优雅的方式吗?