diff --git a/networkframe/networkframe.py b/networkframe/networkframe.py index 725c33d..615543e 100644 --- a/networkframe/networkframe.py +++ b/networkframe/networkframe.py @@ -1244,6 +1244,22 @@ def condense( nodes = pd.DataFrame(index=nodes_index) return self.__class__(nodes, edges, directed=self.directed) + def sort_spectral(self, weight_col="weight", inplace=False) -> "NetworkFrame": + adjacency = self.to_sparse_adjacency(weight_col=weight_col) + adjacency = adjacency + adjacency.T + adjacency = adjacency.astype(float) + + # from scipy.sparse.linalg import svds + # u, s, vh = svds(adjacency, k=1) + + from scipy.sparse.linalg import eigsh + + _, u = eigsh(adjacency, k=1, which="LM", return_eigenvectors=True) + + nodes = self.nodes.iloc[np.argsort(u[:, 0])] + + return self._return(nodes=nodes, inplace=inplace) + class LocIndexer: """A class for indexing a NetworkFrame using .loc."""