Как симметризовать разреженную матрицу в Eigen C ++?

У меня скудная матрица 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 ++?

0

Решение

Самый простой способ сделать ваш код компилируемым — это преобразовать транспонированную матрицу во временную форму правильного порядка хранения:

Eigen::SparseMatrix<FLOATDATA> Asym = 0.5*(A+Eigen::SparseMatrix<FLOATDATA>(A.transpose())));
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]