Я применяю SVD к большой разреженной матрице в Python. Я использую svd из пакета scipy.sparse.linalg. Сингулярные значения сортируются по возрастанию, поэтому сингулярные векторы располагаются в соответствии с возрастанием сингулярных значений. Мне интересно, есть ли возможность выводить сингулярные значения в порядке убывания, чтобы сингулярные векторы также располагались в соответствии с нисходящими сингулярными значениями? Ниже приведен только пример кода:
from scipy.sparse.linalg import svds
from scipy import sparse
X = numpy.random.uniform(size = [40, 20])
X = scipy.sparse.csc_matrix(X)
u, s, vt = svds(X, 10, which = 'LM')
Я пробовал библиотеку Python sparsesvd. Время выполнения sparsesvd намного больше по сравнению с svd на образце матрицы. Поэтому я не рассматриваю возможность использования sparsesvd. Обычный пакет svd в scipy не работает для разреженной матрицы. Спасибо!
u = u[:,::-1]; s = s[::-1]; vt = vt[::-1,:]
(или что-то подобное) должно быть достаточно. - person pv.   schedule 01.07.2014