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

问题描述 投票:0回答:1

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

no operator "=" matches these operands. 

并且错误来自函数insert,而它为Eigen::Matrix< float, 3, 1>指定了一个int,即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个回答
0
投票

这是因为coeffRef尝试将新创建的元素初始化为0,但0不能分配给Vector3f。因此解决方案是使用Array3f代替:

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

当然,要注意运算符*在矢量和矩阵上的Arraythan上表现不同。

© www.soinside.com 2019 - 2024. All rights reserved.