Применение scipy.sparse.linalg.svds возвращает значения nan - PullRequest
1 голос
/ 12 марта 2019

Я начинаю использовать библиотеку scipy.sparse, и когда я пытаюсь применить scipy.sparse.linalg.svds, я получаю сообщение об ошибке, если отсутствуют нулевые значения единственного числа.

Я делаю это, потому что в конце я собираюсь использовать очень большие и очень разреженные матрицы только с записями {+1, -1}, которые не квадрат (> 1100 * 1000 с размером> 0,99), и я хочу знать их ранг. Я приблизительно знаю, что такое ранг, он почти полон, поэтому, зная только последние единственные значения, можно точно сказать, что такое ранг.

Именно поэтому я решил работать с scipy.sparse.linalg.svds и установить which='LM'. Если ранг не полный, будут единственные значения, которые равны нулю, это мой код:

import numpy as np 
import scipy.sparse as sp
import scipy.sparse.linalg as la

a = np.array([[0, 0, 0], [0, 0, 0], [1, 1, -1]], dtype='d')
sp_a = sp.csc_matrix(a)
s = la.svds(sp_a, k=2, return_singular_vectors=False, which='SM')
print(s)

вывод

[           nan 9.45667059e-12]

/usr/lib/python3/dist-packages/scipy/sparse/linalg/eigen/arpack/arpack.py:1849: RuntimeWarning: invalid value encountered in sqrt s = np.sqrt(eigvals)

Есть мысли о том, почему это происходит? Может быть, есть другой эффективный способ узнать ранг, зная, что у меня есть большая не квадратная очень разреженная матрица с почти полным рангом?

scipy версия 1.1.0 numpy версия 1.14.5 Платформа Linux

Заранее спасибо

...