Разреженный свд в броненосце (C ++)

В соответствии с, http://arma.sourceforge.net/docs.html#part_c , Armadillo поддерживает следующие функции:

eig_sym
eig_gen
eigs_sym
eigs_gen
svd
svd_econ

Но, похоже, нет такой функции, как «svds_econ», которая работает с «разреженной» матрицей и возвращает единичные значения и векторы.

Есть ли способ достичь этой функциональности в Armadillo?

1

Решение

Разреженный SVD может быть вычислен косвенно. Например, сначала рассчитать X ‘* X или же X * X», и затем передайте полученную матрицу eigs_sym (). Другой способ состоит в том, чтобы сначала построить разреженную матрицу, такую ​​как [нули (м, м) Х; X ‘нули (n, n)], где м а также N указать количество строк и столбцов в Икс.

Вы также можете масштабировать Икс по его 1-норме заранее, чтобы увеличить стабильность.

1

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

Начиная с версии 5.0, броненосец имеет СВД () функция для получения ограниченного числа сингулярных значений и сингулярных векторов.

5

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector