Я определяю разреженную матрицу как 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 - целое).
Кажется, что в этой строке кода (строка 1235 изSparseMatrix.h), они не принимали во внимание тип матрицы матрицы для сравнения.
Мне было интересно, есть ли у вас какие-либо идеи для решения этой ошибки?
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!
}