特征稀疏矩阵的 CoeffRef 中的错误,元素类型为向量

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

本文关键字:元素 类型 向量 错误 CoeffRef 特征      更新时间:2023-10-16

我定义一个稀疏矩阵为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 是一个 int)。

似乎在这一行代码(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;

当然,请注意,运算符*在Array上的行为与在向量和矩阵上的行为不同。