networkx,创建、操作和研究复杂网络的结构、动态和功能

什么是图

图是由节点(也称为顶点)和边组成的数据结构。节点表示图中的实体,边表示实体之间的关系或连接

图可用于对各种现实世界问题进行建模,例如社交网络、交通系统和计算机网络等。

有向图是边有方向的图。这意味着边仅沿特定方向从一个节点到达另一个节点

相反,无向图没有方向,边可以以任何方向从一个节点到另一个节点

最后,多重图是在相同的两个节点之间可以具有多条边的图。

初体验

库的安装

可以使用 pip 来安装 NetworkX。

pip install networkx

安装完 NetworkX 后,你就可以开始在 Jupyter Notebook 中使用它。

首先,你需要导入 networkx 和 matplotlib 包,它们用于绘制和可视化图形。

下面是如何使用 NetworkX 创建简单图形,并使用 matplotlib 绘制它的示例。

示例

在此示例中,我们首先使用 import 语句导入 networkx 和 matplotlib 包。

然后,我们使用 NetworkX 的 Graph 类创建一个空图。

我们使用 add_node() 函数添加 ID 为 1 和 2 的两个节点,并使用 add_edge() 函数在它们之间添加一条边。

最后,我们使用 NetworkX 的 draw() 函数绘制带有标签的图形,并使用 matplotlib 的 show() 函数实际显示它。

正如你所看到的,Graph 创建了一个无向图。

import random
import networkx as nx

G = nx.Graph()
G.add_node('1')
G.add_node('2')
G.add_edge('1','2')
nx.draw(G,with_labels=True)

图片

当然,networkx 的主要目的不是绘制如此简单的图表。相反,networkx 的真正强大之处在于分析图表

例如,我们可以轻松找到两个给定节点之间的最短路径

为了说明这一点,我们将创建一个更大的随机图表

# Create a random graph of 100 nodes:

num_nodes = 100

G = nx.Graph()
G.add_nodes_from(range(num_nodes))

# Give each node an edge to two other nodes, randomly chosen
for i in range(num_nodes):
    G.add_edge(i, random.randint(0, num_nodes-1))
    G.add_edge(i, random.randint(0, num_nodes-1))

# We are looking for the shortest distance from node 0 to node 99.
# Paint node 0 red and node 99 green.

color_map = ["gray"] * num_nodes
color_map[0] = "red"
color_map[-1] = "green"
    
nx.draw(G, node_color=color_map, with_labels=True)

此代码示例创建了一个包含 100 个节点和节点之间的边的随机图。

它使用 Python 标准库中的 random 模块,通过随机选择两个节点来添加边。

然后,根据节点是起始节点(红色)还是结束节点(绿色)来分配节点的颜色。这是通过创建 color_map 列表来完成的,其中每个元素对应于图中的一个节点。color_map 列表的第一个元素设置为“red”,对应于起始节点,最后一个元素设置为“green”,对应于结束节点。

最后,NetworkX 的 draw() 函数用于绘制具有指定颜色的图形。node_color 参数设置为 color_map 列表,它将每个节点映射到其相应的颜色。

图片

接下来,我们计算红色节点和绿色节点之间的最短路径。

示例中创建的随机图中的起始(红色)和结束(绿色)节点之间的最短路径是使用 NetworkX 的 Shortest_path() 函数计算的。

该函数将图以及起始节点和结束节点的 ID 作为输入。结果存储在变量 path 中,它形成两个节点之间最短路径的节点列表

path=nx.shortest_path(G,source=0, target=99)

让我们将最短路径涂成红色,即最短路径上的所有边都应涂成红色,所有其他边涂成黑色。

= [(path[i], path[i+1]) for i in range(len(path)-1)]
edge_colors = []
for edge in G.edges:
    if edge in edges_on_path \
            or tuple(reversed(edge)) in edges_on_path:
        edge_colors.append("red")
    else:
        edge_colors.append("black")
        
nx.draw_spring(G, node_color=color_map, edge_color=edge_colors, with_labels=True)

最短路径上的边存储在 edges_on_path 列表中。

这是通过迭代 path 列表中的节点并将相邻节点之间的边添加到 edges_on_path 列表中来完成的。

然后,根据边是否在最短路径上创建 edge_colors 列表。如果边缘位于最短路径上,则其颜色设置为“红色”。否则,其颜色设置为 “黑色”。

最后,NetworkX 的 draw_spring() 函数用于绘制具有指定节点和边颜色的图形。node_color 参数设置为 color_map 列表,该列表将每个节点映射到其相应的颜色。将 edge_color 参数设置为 edge_colors 列表,该列表将每条边映射到其相应的颜色。

图片

通过使用 Python 中的 networkx 库,你可以轻松创建和分析复杂图,包括有向图和无向图、多重图等。

来源-----程序员小寒

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇