pylibcugraph.weakly_connected_components#
- pylibcugraph.weakly_connected_components(ResourceHandle resource_handle, _GPUGraph graph, offsets, indices, weights, labels, bool_t do_expensive_check)[source]#
Generate the Weakly Connected Components from either an input graph or or CSR arrays(‘offsets’, ‘indices’, ‘weights’) and attach a component label to each vertex.
- Parameters:
- resource_handleResourceHandle
Handle to the underlying device resources needed for referencing data and running algorithms.
- graphSGGraph or MGGraph
The input graph.
- offsetsobject supporting a __cuda_array_interface__ interface
Array containing the offsets values of a Compressed Sparse Row matrix that represents the graph.
- indicesobject supporting a __cuda_array_interface__ interface
Array containing the indices values of a Compressed Sparse Row matrix that represents the graph.
- weightsobject supporting a __cuda_array_interface__ interface
Array containing the weights values of a Compressed Sparse Row matrix that represents the graph
- do_expensive_checkbool_t
If True, performs more extensive tests on the inputs to ensure validitity, at the expense of increased run time.
- Returns:
- A tuple containing containing two device arrays which are respectively
- vertices and their corresponding labels
Examples
>>> import pylibcugraph, cupy, numpy >>> from pylibcugraph import weakly_connected_components >>> srcs = cupy.asarray([0, 1, 1, 2, 2, 0], dtype=numpy.int32) >>> dsts = cupy.asarray([1, 0, 2, 1, 0, 2], dtype=numpy.int32) >>> weights = cupy.asarray( ... [1.0, 1.0, 1.0, 1.0, 1.0, 1.0], dtype=numpy.float32) >>> resource_handle = pylibcugraph.ResourceHandle() >>> graph_props = pylibcugraph.GraphProperties( ... is_symmetric=True, is_multigraph=False) >>> G = pylibcugraph.SGGraph( ... resource_handle, graph_props, srcs, dsts, weight_array=weights, ... store_transposed=False, renumber=True, do_expensive_check=False) >>> (vertices, labels) = weakly_connected_components( ... resource_handle, G, None, None, None, None, False)
>>> vertices [0, 1, 2] >>> labels [2, 2, 2]
>>> import cupy as cp >>> import numpy as np >>> from scipy.sparse import csr_matrix >>> >>> graph = [ ... [0, 1, 1, 0, 0], ... [0, 0, 1, 0, 0], ... [0, 0, 0, 0, 0], ... [0, 0, 0, 0, 1], ... [0, 0, 0, 0, 0], ... ] >>> scipy_csr = csr_matrix(graph) >>> rows, cols = scipy_csr.nonzero() >>> scipy_csr[cols, rows] = scipy_csr[rows, cols] >>> >>> cp_offsets = cp.asarray(scipy_csr.indptr) >>> cp_indices = cp.asarray(scipy_csr.indices, dtype=np.int32) >>> >>> resource_handle = pylibcugraph.ResourceHandle() >>> weakly_connected_components(resource_handle=resource_handle, graph=None, ... offsets=cp_offsets, ... indices=cp_indices, ... weights=None, ... False) >>> print(f"{len(set(cp_labels.tolist()))} - {cp_labels}") 2 - [2 2 2 4 4]