MCPcopy Create free account
hub / github.com/Valdecy/pyCombinatorial / spectral_embedding

Function spectral_embedding

pyCombinatorial/algorithm/rss.py:162–189  ·  view source on GitHub ↗
(L, num_vecs = 3, tol = 1e-6, maxiter = 5000)

Source from the content-addressed store, hash-verified

160
161# Function: SE
162def spectral_embedding(L, num_vecs = 3, tol = 1e-6, maxiter = 5000):
163 n = L.shape[0]
164 if n <= 2:
165 return np.zeros((n, 1), dtype = float)
166 num_vecs = int(max(1, min(num_vecs, n - 1)))
167 k_req = min(num_vecs + 3, n - 1)
168 k_req = max(k_req, 2)
169 try:
170 vals, vecs = eigsh(L, k = k_req, which = 'SM', tol = tol, maxiter = maxiter)
171 except ArpackNoConvergence as e:
172 if e.eigenvectors is not None and e.eigenvalues is not None:
173 vals, vecs = e.eigenvalues, e.eigenvectors
174 else:
175 k_req2 = max(2, min(k_req - 1, n - 1))
176 vals, vecs = eigsh(L, k = k_req2, which = 'SM', tol = tol, maxiter = maxiter)
177 idx = np.argsort(vals)
178 vals = vals[idx]
179 vecs = vecs[:, idx]
180 eps = 1e-10
181 j = 0
182 while j < len(vals) and vals[j] < eps:
183 j = j + 1
184 if j >= len(vals):
185 j = 1
186 end = min(j + num_vecs, vecs.shape[1])
187 if end <= j:
188 end = min(j + 1, vecs.shape[1])
189 return vecs[:, j:end].copy()
190
191############################################################################
192

Callers 1

Calls

no outgoing calls

Tested by

no test coverage detected