【问题标题】:Error in CoeffRef of Eigen sparse matrix with elements type of a vector向量元素类型的特征稀疏矩阵的 CoeffRef 误差
【发布时间】:2019-04-29 16:20:43
【问题描述】:

我将稀疏矩阵定义为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!
}

【问题讨论】:

    标签: c++ sparse-matrix eigen


    【解决方案1】:

    这是因为coeffRef 试图将新创建的元素初始化为 0,但 0 不能分配给 Vector3f。所以解决方案是改用Array3f

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-27
      • 1970-01-01
      • 2013-09-25
      • 2020-03-01
      • 2014-10-30
      • 2020-04-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多