Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Graph algorithms written in GraphBLAS

License

NotificationsYou must be signed in to change notification settings

python-graphblas/graphblas-algorithms

Repository files navigation

GraphBLAS Algorithms
conda-forgepypiPyPI - Python VersionLicense
TestsCoverageDOIDiscord

graphblas-algorithms is a collection of GraphBLAS algorithms written usingpython-graphblas.It may be used directly or as an experimentalbackend to NetworkX.

Why use GraphBLAS Algorithms? Because it isfast,flexible, andfamiliar by using the NetworkX API.

Are we missing anyalgorithms that you want?Please let us know!
GraphBLAS vs NetworkX
GraphBLAS vs igraph

Installation

conda install -c conda-forge graphblas-algorithms
pip install graphblas-algorithms

Basic Usage

First, create a GraphBLAS Matrix.

importgraphblasasgbM=gb.Matrix.from_coo(  [0,0,1,2,2,3],  [1,3,0,0,1,2],  [1.,2.,3.,4.,5.,6.],nrows=4,ncols=4,dtype='float32')

Next wrap the Matrix asga.Graph.

importgraphblas_algorithmsasgaG=ga.Graph(M)

Finally call an algorithm.

hubs,authorities=ga.hits(G)

When the result is a value per node, agb.Vector will be returned.In the case ofHITS,two Vectors are returned representing the hubs and authorities values.

Algorithms whose result is a subgraph will returnga.Graph.

Plugin for NetworkX

Dispatching to plugins is a new feature in Networkx 3.0.When bothnetworkx andgraphblas-algorithms are installed in anenvironment, calls to NetworkX algorithms can be dispatched to theequivalent version ingraphblas-algorithms.

Dispatch Example

importnetworkxasnximportgraphblas_algorithmsasga# Generate a random graph (5000 nodes, 1_000_000 edges)G=nx.erdos_renyi_graph(5000,0.08)# Explicitly convert to ga.GraphG2=ga.Graph.from_networkx(G)# Pass G2 to NetworkX's k_trussT5=nx.k_truss(G2,5)

G2 is not anx.Graph, but it does have an attribute__networkx_plugin__ = "graphblas". This tells NetworkX todispatch the k_truss call to graphblas-algorithms. This linkconnection exists because graphblas-algorithms registersitself as a "networkx.plugin" entry point.

The resultT5 is aga.Graph representing the 5-truss structure of theoriginal graph. To convert to a NetworkX Graph, use:

T5.to_networkx()

Note that even with the conversions to and fromga.Graph, this example still runs 10xfaster than using the native NetworkX k-truss implementation. Speed improvements scalewith graph size, so larger graphs will see an even larger speed-up relative to NetworkX.

Plugin Algorithms

The following NetworkX algorithms have been implementedby graphblas-algorithms and can be used following thedispatch pattern shown above.

graphblas_algorithms.nxapi├── boundary│   ├── edge_boundary│   └── node_boundary├── centrality│   ├── degree_alg│   │   ├── degree_centrality│   │   ├── in_degree_centrality│   │   └── out_degree_centrality│   ├── eigenvector│   │   └── eigenvector_centrality│   └── katz│       └── katz_centrality├── cluster│   ├── average_clustering│   ├── clustering│   ├── generalized_degree│   ├── square_clustering│   ├── transitivity│   └── triangles├── community│   └── quality│       ├── inter_community_edges│       └── intra_community_edges├── components│   ├── connected│   │   ├── is_connected│   │   └── node_connected_component│   └── weakly_connected│       └── is_weakly_connected├── core│   └── k_truss├── cuts│   ├── boundary_expansion│   ├── conductance│   ├── cut_size│   ├── edge_expansion│   ├── mixing_expansion│   ├── node_expansion│   ├── normalized_cut_size│   └── volume├── dag│   ├── ancestors│   └── descendants├── dominating│   └── is_dominating_set├── efficiency_measures│   └── efficiency├── generators│   └── ego│       └── ego_graph├── isolate│   ├── is_isolate│   ├── isolates│   └── number_of_isolates├── isomorphism│   └── isomorph│       ├── fast_could_be_isomorphic│       └── faster_could_be_isomorphic├── linalg│   ├── bethehessianmatrix│   │   └── bethe_hessian_matrix│   ├── graphmatrix│   │   └── adjacency_matrix│   ├── laplacianmatrix│   │   ├── laplacian_matrix│   │   └── normalized_laplacian_matrix│   └── modularitymatrix│       ├── directed_modularity_matrix│       └── modularity_matrix├── link_analysis│   ├── hits_alg│   │   └── hits│   └── pagerank_alg│       ├── google_matrix│       └── pagerank├── lowest_common_ancestors│   └── lowest_common_ancestor├── operators│   ├── binary│   │   ├── compose│   │   ├── difference│   │   ├── disjoint_union│   │   ├── full_join│   │   ├── intersection│   │   ├── symmetric_difference│   │   └── union│   └── unary│       ├── complement│       └── reverse├── reciprocity│   ├── overall_reciprocity│   └── reciprocity├── regular│   ├── is_k_regular│   └── is_regular├── shortest_paths│   ├── dense│   │   ├── floyd_warshall│   │   ├── floyd_warshall_numpy│   │   └── floyd_warshall_predecessor_and_distance│   ├── generic│   │   └── has_path│   ├── unweighted│   │   ├── all_pairs_shortest_path_length│   │   ├── single_source_shortest_path_length│   │   └── single_target_shortest_path_length│   └── weighted│       ├── all_pairs_bellman_ford_path_length│       ├── bellman_ford_path│       ├── bellman_ford_path_length│       ├── negative_edge_cycle│       └── single_source_bellman_ford_path_length├── simple_paths│   └── is_simple_path├── smetric│   └── s_metric├── structuralholes│   └── mutual_weight├── tournament│   ├── is_tournament│   ├── score_sequence│   └── tournament_matrix├── traversal│   └── breadth_first_search│       ├── bfs_layers│       └── descendants_at_distance└── triads    └── is_triad

[8]ページ先頭

©2009-2025 Movatter.jp