Почему разреженная реализация Scipy возвращает неправильное число единичных значений, а плотное возвращает правильное? - PullRequest
0 голосов
/ 21 июня 2019

Я пытаюсь оценить декомпозицию Singular Value в моем наборе данных, который имеет размеры 1401375, 51. Когда я пытаюсь использовать scipy.linalg.svd, он дает мне правильное число единичных значений (51), и все они верны (Я проверил против LAPACK). Однако, когда я пытаюсь использовать scipy.sparse.linalg.svds, это выдает ошибку: ValueError: k должно быть от 1 до мин (A.shape), k = 51

  _, sigma, _ = sp.sparse.linalg.svds(A_s, k=51, return_singular_vectors='vh',which='LM')
_, sigma, _ = sp.linalg.svd(A_D, full_matrices=False,
                                            overwrite_a=True, check_finite=False,
                                            compute_uv=True)

Я ожидаю, что разреженная версия вернет 51 единичное значение, но это не удастся. Когда я понижаю значение k до 50, оно выполняется успешно.

1 Ответ

1 голос
/ 21 июня 2019

Вы можете найти это в документации scipy для scipy , но k должно быть: 1 <= k <min (A.shape), так что если ваша форма 1401375, 51, то мин. 51 иk должно быть меньше, чем не меньше или равно </p>

...