c++ - vector 元素类型的 Eigen 稀疏矩阵CoeffRef的误差

标签 c++ sparse-matrix eigen

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

no operator "=" matches these operands. 

并且错误来自函数insert,同时它为Eigen::Matrix< float, 3, 1>分配了一个int到m_data.value(p) = 0(考虑到m_data.value(p)是 vector 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;

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

关于c++ - vector 元素类型的 Eigen 稀疏矩阵CoeffRef的误差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55907290/

相关文章:

c++ - 在 C 程序中 if 语句在运行时被忽略

c++ - 删除 lambda 赋值运算符的基本原理?

arrays - 稀疏向量之和 : bug or feature?

python - 从稀疏计数矩阵构建预期频率矩阵的更快方法

c++ - 如何对 Eigen::Vector 的 std::vector 进行唯一排序?

c++ - Boost::fusion、Eigen 和 zip 变换

C++ 回调数组

c++ - 无法同时在两个 10Gbps 接口(interface)上达到全线速

python - TensorFlow 中稀疏加法的 scatter_nd add() 示例

c++ - 让应用程序拥有 CPU 和 GPU 计算后端的最佳方式是什么