Thư viện thuật toán đồ thị Python

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] == 6
0 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] == 6
1 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] == 6
2

Để 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] == 6
3 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] == 6
4

>>> 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

Có thư viện đồ thị bằng Python không?

python-graph [dist. python-graph-core, mod. pygraph] là thư viện để làm việc với đồ thị trong Python . Phần mềm này cung cấp cấu trúc dữ liệu phù hợp để biểu diễn đồ thị và toàn bộ các thuật toán quan trọng.

Thư viện vẽ đồ thị Python tốt nhất là gì?

matplotlib . matplotlib là O. G. thư viện trực quan hóa dữ liệu Python. Mặc dù đã hơn một thập kỷ nhưng đây vẫn là thư viện được sử dụng rộng rãi nhất để vẽ sơ đồ trong cộng đồng Python.

Thuật toán đồ thị trong Python là gì?

Các thuật toán trong đồ thị bao gồm tìm đường đi giữa hai nút, tìm đường đi ngắn nhất giữa hai nút, xác định chu trình trong biểu đồ [chu trình là đường đi không rỗng từ nút đến chính nó], tìm đường đi đến tất cả các nút [thuật toán nổi tiếng

Thư viện Python nào là tốt nhất để trực quan hóa dữ liệu?

Thư viện trực quan hóa dữ liệu phổ biến nhất trong Python là Plotly , cung cấp biểu đồ tương tác và dễ đọc cho người mới bắt đầu. Nó được sử dụng rộng rãi để xử lý dữ liệu tài chính, địa lý, thống kê và khoa học.

Chủ Đề