Armadillo (библиотека линейной алгебры C ++: http://arma.sourceforge.net/) поддержка предварительной версии Sparse Matrix (в модели хранения CSC). Как я прочитал в документации и коде, Реализация разреженной матрицы броненосца не делает различий между нулевыми значениями и «неустановленными» значениями.
В документации сказано, что все хранимые значения отличны от нуля, путем вычета все несохраненные значения равны нулю. Вместо этого мне нужно отличить «unset» от нуля.
В настоящее время я портирую проект Julia на C ++ / Armadillo, где мне нужно манипулировать некоторыми разреженными матрицами с -1, 0, 1 и «неустановленными» значениями. В отличие от броненосца, Юлия различает ноль и «неустановленный» в своей редкой матричной реализации.
Моя первая идея, возможно, состоит в том, чтобы использовать сложную разреженную матрицу (arma :: sp_cx_mat, arma :: sp_cx_imat) с небольшими хитростями для управления схожими нулевыми значениями (использовать воображаемую как фиктивную ненулевую часть). Но это действительно не элегантно и, безусловно, влияет на производительность кода.
Как вы думаете, есть способ обойти ограничение Armadillo без написания моего собственного матричного класса?
Большое спасибо за ответ.
Задача ещё не решена.
Других решений пока нет …