具有向量元素类型的特征稀疏矩阵的 CoeffRef 误差

Error in CoeffRef of Eigen sparse matrix with elements type of a vector

我将稀疏矩阵定义为Eigen::SparseMatrix< Eigen::Matrix<float, 3, 1> >,这意味着矩阵的每个元素都是一个 3x1 向量。 但是,当我调用函数 CoeffRef 以便将向量分配给元素时,我在 SparseMatrix.h:

中收到以下错误
no operator "=" matches these operands. 

并且错误来自函数 insert,同时它将一个 int 分配给一个 Eigen::Matrix< float, 3, 1>,即 m_data.value(p) = 0(考虑到 m_data.value(p) 是一个向量 3x1 0 是一个整数)。

似乎在这行代码中(SparseMatrix.h的第1235行),他们没有考虑比较矩阵的模板类型。

我想知道您是否有任何解决此错误的想法?

typedef Eigen::Matrix< float, 3, 1> Vec3f;

Eigen::SparseMatrix< Vec3f > lA( m, n);
lA.reserve( Eigen::VectorXi::Constant(m, 4) );

for( unsigned int i = 0; i < m; i++)
{

   Vec3f lVec( 0.0, 0.0, 1.0);

   lA.coeffRef(i, i) = lVec; // got the error here!
}

这是因为coeffRef试图将新创建的元素初始化为0,但是0不能赋值给Vector3f。所以解决方案是使用 Array3f 代替:

typedef Eigen::Array<float, 3, 1> Vec3f;

当然,请注意 operator* 在 Array 上的表现与在向量和矩阵上的表现不同。