Я пытаюсь оценить разложение по сингулярным значениям в моем наборе данных с размерами 1401375, 51. Когда я пытаюсь использовать scipy.linalg.svd, он дает мне правильное количество сингулярных значений (51), и все они верны (я проверил против ЛАПАК). Однако, когда я пытаюсь использовать scipy.sparse.linalg.svds, возникает ошибка: ValueError: k должно быть между 1 и min(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, он выполняется успешно.
Вы можете найти это в документации scipy для острый, но k должно быть: 1 <= k < min(A.shape), поэтому, если ваша форма 1401375, 51, тогда min равно 51, а k должно быть меньше этого не меньше больше или равно
Python начинается с 0, а не с 1, поэтому, если вы считаете от 0 до 50, это на самом деле 51 значение. Ввод 51 будет означать от 0 до 51 = 52 значения, что будет больше, чем то, с чего вы начали.
Спасибо. Тогда ошибка формулируется плохо, так как между включает min(A.shape). Есть причины, по которым он не включает min(A.shape)?