У меня скудная матрица A
в Eigen C ++. Теперь я хочу симметризовать его в другой разреженной матрице Asym
:
Я надеялся, что это будет так просто, как:
Eigen::SparseMatrix<FLOATDATA> A;
...
Eigen::SparseMatrix<FLOATDATA> Asym = 0.5*(A+A.transpose()); // error here
Но по понятным причинам он выдает следующую ошибку подтверждения:
error: static assertion failed: THE_STORAGE_ORDER_OF_BOTH_SIDES_MUST_MATCH
У меня вопрос, как аккуратно сделать вышеуказанную операцию в Eigen C ++?
Самый простой способ сделать ваш код компилируемым — это преобразовать транспонированную матрицу во временную форму правильного порядка хранения:
Eigen::SparseMatrix<FLOATDATA> Asym = 0.5*(A+Eigen::SparseMatrix<FLOATDATA>(A.transpose())));
Других решений пока нет …