Grand là một Rosetta Stone của công nghệ đồ thị. Biểu đồ lớn có "Phần phụ trợ", xử lý chi tiết triển khai nói chuyện với dữ liệu trên đĩa [hoặc trên đám mây] và "Phương ngữ", là cách nói chuyện ưa thích của bạn với biểu đồ
Ví dụ: đây là cách bạn tạo một biểu đồ được duy trì trong DynamoDB ["Phần phụ trợ"] nhưng bạn có thể nói chuyện như thể đó là một networkx.DiGraph
["Phương ngữ"]
import grand G = grand.Graph[backend=grand.DynamoDBBackend[]] G.nx.add_node["Jordan", type="Person"] G.nx.add_node["DotMotif", type="Project"] G.nx.add_edge["Jordan", "DotMotif", type="Created"] assert len[G.nx.edges[]] == 1 assert len[G.nx.nodes[]] == 2
Nó không dừng lại ở đó. Nếu bạn thích cách IGraph xử lý việc chèn nút ẩn danh [ugh] nhưng bạn muốn xử lý biểu đồ bằng cú pháp NetworkX thông thường, hãy sử dụng IGraphDialect
và sau đó chuyển sang
import grand G = grand.Graph[] # Start in igraph: G.igraph.add_vertices[5] # A little bit of networkit: G.networkit.addNode[] # And switch to networkx: assert len[G.nx.nodes[]] == 6 # And back to igraph! assert len[G.igraph.vs] == 60 giữa chừng
import grand G = grand.Graph[] # Start in igraph: G.igraph.add_vertices[5] # A little bit of networkit: G.networkit.addNode[] # And switch to networkx: assert len[G.nx.nodes[]] == 6 # And back to igraph! assert len[G.igraph.vs] == 6
Bạn sẽ có thể sử dụng các đối tượng "phương ngữ" giống như cách bạn sử dụng biểu đồ thực từ các thư viện cấu thành. Ví dụ: đây là thuật toán NetworkX chạy trên biểu đồ NetworkX cùng với biểu đồ Grand
import networkx as nx nx.algorithms.isomorphism.GraphMatcher[networkxGraph, grandGraph.nx]
Dưới đây là một ví dụ về việc sử dụng Networkit, một thư viện đồ thị có hiệu suất cao và đính kèm các thuộc tính nút/cạnh, vốn không được thư viện hỗ trợ theo mặc định
Leafy là một thư viện đồ thị python được viết bằng cython. Sự kết hợp này mang lại tốc độ viết thư viện bằng c với lợi ích của các ràng buộc python
Cách sử dụng
đối tượng đồ thị
Leafy hỗ trợ hai loại biểu đồ. dày đặc và thưa thớt. Chúng được đại diện bởi các lớp
import grand G = grand.Graph[] # Start in igraph: G.igraph.add_vertices[5] # A little bit of networkit: G.networkit.addNode[] # And switch to networkx: assert len[G.nx.nodes[]] == 6 # And back to igraph! assert len[G.igraph.vs] == 61 và
import grand G = grand.Graph[] # Start in igraph: G.igraph.add_vertices[5] # A little bit of networkit: G.networkit.addNode[] # And switch to networkx: assert len[G.nx.nodes[]] == 6 # And back to igraph! assert len[G.igraph.vs] == 62
Để khởi tạo một đối tượng đồ thị, chúng ta cần biết số nút [đỉnh] trong đồ thị và nếu đồ thị có hướng. Đồ thị mặc định là vô hướng
>>> from leafy.graph import Graph >>> from pprint import pprint >>> g = Graph[4] >>> g.add_edge[0, 1] >>> g.add_edge[2, 3] >>> g.add_edge[2, 1] >>> pprint[g.matrix] [[1000001.0, 1.0, 1000001.0, 1000001.0], [1.0, 1000001.0, 1.0, 1000001.0], [1000001.0, 1.0, 1000001.0, 1.0], [1000001.0, 1000001.0, 1.0, 1000001.0]]
các cạnh giống nhau có thể được định nghĩa là một
import grand G = grand.Graph[] # Start in igraph: G.igraph.add_vertices[5] # A little bit of networkit: G.networkit.addNode[] # And switch to networkx: assert len[G.nx.nodes[]] == 6 # And back to igraph! assert len[G.igraph.vs] == 63 có hướng
>>> from leafy.graph import SparseGraph >>> g = SparseGraph[4, True] >>> g.add_edge[0, 1] >>> g.add_edge[2, 3] >>> g.add_edge[2, 1] >>> g.list [[1], [], [3, 1], []]
Tìm kiếm
Leafy có thể chạy Tìm kiếm theo chiều sâu [DFS] và Tìm kiếm theo chiều rộng [BFS] trên biểu đồ và trả về các thuộc tính tìm kiếm biểu đồ
Để chạy tìm kiếm, chúng ta cần xác định biểu đồ để tìm kiếm và nút để bắt đầu từ đó. Trước khi bạn có thể xem các thuộc tính, chúng tôi phải gọi
import grand G = grand.Graph[] # Start in igraph: G.igraph.add_vertices[5] # A little bit of networkit: G.networkit.addNode[] # And switch to networkx: assert len[G.nx.nodes[]] == 6 # And back to igraph! assert len[G.igraph.vs] == 64
>>> from leafy.search import DFS >>> graph = small_graph[request.param] >>> dfs = DFS[graph, 0] >>> dfs.run[] >>> dfs.simple_path[12] [0, 1, 2, 11, 12] >>> dfs.bridges [[1, 3], [3, 4], [3, 5], [2, 11], [11, 12]]
chữ ghép
Đối với chữ ghép hỗ trợ lá DFS có thể được nhập từ ________ 15
>>> from leafy.digraph import DFS >>> dag = small_dag[] >>> dfs = DFS[dag, 0] >>> dfs.run[] >>> dfs.is_dag True >>> dfs.topological_order[] [0, 6, 2, 3, 5, 4, 9, 11, 12, 10, 1]
Khoảng cách ngắn nhất
Đối với đường dẫn ngắn nhất của mạng, lá hỗ trợ Dijkstra nguồn duy nhất có thể được nhập từ
>>> from leafy.graph import SparseGraph >>> g = SparseGraph[4, True] >>> g.add_edge[0, 1] >>> g.add_edge[2, 3] >>> g.add_edge[2, 1] >>> g.list [[1], [], [3, 1], []]0