rm CondaPkg environment

This commit is contained in:
ton
2023-04-06 13:53:47 +07:00
parent 0a57ed7884
commit c43d949309
3329 changed files with 5725 additions and 447022 deletions

View File

@@ -10,7 +10,12 @@ from networkx.utils import (
reverse_cuthill_mckee_ordering,
)
__all__ = ["algebraic_connectivity", "fiedler_vector", "spectral_ordering"]
__all__ = [
"algebraic_connectivity",
"fiedler_vector",
"spectral_ordering",
"spectral_bisection",
]
class _PCGSolver:
@@ -585,3 +590,70 @@ def spectral_ordering(
order.extend(component)
return order
def spectral_bisection(
G, weight="weight", normalized=False, tol=1e-8, method="tracemin_pcg", seed=None
):
"""Bisect the graph using the Fiedler vector.
This method uses the Fiedler vector to bisect a graph.
The partition is defined by the nodes which are associated with
either positive or negative values in the vector.
Parameters
----------
G : NetworkX Graph
weight : str, optional (default: weight)
The data key used to determine the weight of each edge. If None, then
each edge has unit weight.
normalized : bool, optional (default: False)
Whether the normalized Laplacian matrix is used.
tol : float, optional (default: 1e-8)
Tolerance of relative residual in eigenvalue computation.
method : string, optional (default: 'tracemin_pcg')
Method of eigenvalue computation. It must be one of the tracemin
options shown below (TraceMIN), 'lanczos' (Lanczos iteration)
or 'lobpcg' (LOBPCG).
The TraceMIN algorithm uses a linear system solver. The following
values allow specifying the solver to be used.
=============== ========================================
Value Solver
=============== ========================================
'tracemin_pcg' Preconditioned conjugate gradient method
'tracemin_lu' LU factorization
=============== ========================================
seed : integer, random_state, or None (default)
Indicator of random number generation state.
See :ref:`Randomness<randomness>`.
Returns
--------
bisection : tuple of sets
Sets with the bisection of nodes
Examples
--------
>>> G = nx.barbell_graph(3, 0)
>>> nx.spectral_bisection(G)
({0, 1, 2}, {3, 4, 5})
References
----------
.. [1] M. E. J Newman 'Networks: An Introduction', pages 364-370
Oxford University Press 2011.
"""
import numpy as np
v = nx.fiedler_vector(G, weight, normalized, tol, method, seed)
nodes = np.array(list(G))
pos_vals = v >= 0
return set(nodes[~pos_vals]), set(nodes[pos_vals])