特征稀疏矩阵的 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 是一个 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
上的行为与在向量和矩阵上的行为不同。
相关文章:
- C++ 未初始化的本地(非全局)int 数组中的元素类型到底是什么?
- 如何将 n 个连续元素插入到元素类型不可复制的 std::vector 中?
- 元函数使用 decltype 返回元素类型
- STDLIB中容器元素类型有什么要求?
- 使用 dectlype 推断模板元素类型中的数据类型是否正确?
- boost multi_index - 如果元素类型仅支持移动语义,如何遍历它?
- 打印/修改类对象的特定成员变量,其类定义列表 (STL) 包含的元素类型
- 使用声明中的元素类型隐式初始化 std::array
- 使用 SFINAE 和 void_t 来确定容器内的元素类型
- 键入 trait 以获取 std::array 或 C 样式数组的元素类型
- 如何在QTScript中将QLIST内部的QMAP注册为元素类型
- 关联容器,比较函数不是元素类型的一部分吗?
- 特征稀疏矩阵的 CoeffRef 中的错误,元素类型为向量
- 在编译时间检查模板参数类型是否设置或多键,并且容器的元素类型是算术的
- 从函数模板参数中自动推论对容器的元素类型
- 直接获取基于范围的循环中的元素类型 **例如"using"
- 定义指向 C++ 中相同元素类型的元素
- 如何在C++中一一阅读 CIN?元素类型不同
- 如何从STL容器实例中获取元素类型
- 容器的const_cast元素类型