Armadillo C++: есть ли способ эффективного создания треугольной или симметричной матрицы?

Я использую броненосец в основном для симметричных и треугольных матриц. Я хотел быть эффективным с точки зрения хранения памяти. Однако, похоже, нет другого пути, кроме как создать новый мат и заполнить нулями (для треугольных) или дубликатами (для симметричных) нижнюю/верхнюю часть матрицы.

Есть ли более эффективный способ использования треугольных/симметричных матриц с помощью Armadillo?

Спасибо, Антуан


person user2638923    schedule 31.07.2013    source источник


Ответы (2)


В Armadillo нет специальной поддержки треугольных или ленточных матриц. Однако, начиная с версии 3.4, постепенно добавлялась поддержка разреженных матриц. В зависимости от того, какие функции Armadillo вам нужны, и разреженности вашей матрицы, вы можете получить пользу от использования SpMat<type>, который реализует формат сжатого разреженного столбца (CSC). Для каждого ненулевого значения в вашей матрице формат CSC сохраняет индекс строки вместе со значением, поэтому вы, вероятно, не сэкономите много памяти для треугольной матрицы. Однако ленточная диагональная матрица должна потреблять значительно меньше памяти.

person Svaberg    schedule 01.04.2014

symmatu()/symmatl() и trimatu()/trimatl() могут быть тем, что вы ищете:

http://arma.sourceforge.net/docs.html

person ruggero    schedule 09.09.2013