特征 - 使用第k个对角线上的向量元素创建稀疏矩阵

时间:2017-03-29 15:59:41

标签: c++ sparse-matrix eigen

在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);
}

有更快和/或更优雅的方式吗?

0 个答案:

没有答案