Python中gnm_random_graph的用法
时间: 2023-06-04 08:02:54 浏览: 310
gnm_random_graph是networkx包中的函数,用于生成一个具有n个节点和e条边的随机无向图。
Example:
import networkx as nx
#生成具有10个节点和15条边的随机无向图
G = nx.gnm_random_graph(10,15)
在生成的随机图中,如果e大于n*(n-1)/2,则会出现重边和自环。如果e小于n-1,则会出现不连通的图。
相关问题
链路预测代码python
链路预测(link prediction)是指在一个图中预测两个节点之间是否存在一条边。以下是一个简单的链路预测代码示例,使用Python和NetworkX库:
```python
import networkx as nx
import random
# 创建一个随机图
G = nx.gnm_random_graph(20, 40)
# 随机选择一些边作为测试集,剩下的作为训练集
edges = list(G.edges())
random.shuffle(edges)
train_edges = edges[:len(edges)//2]
test_edges = edges[len(edges)//2:]
# 基于图的特征计算边的相似度
def similarity(u, v, G):
# 共同邻居数
cn = len(list(nx.common_neighbors(G, u, v)))
# Jaccard系数
jc = nx.jaccard_coefficient(G, [(u, v)])
jc = next(jc)[2]
# Adamic-Adar指数
aa = nx.adamic_adar_index(G, [(u, v)])
aa = next(aa)[2]
# Preferential Attachment指数
pa = nx.preferential_attachment(G, [(u, v)])
pa = next(pa)[2]
# 融合以上特征
return (cn, jc, aa, pa)
# 训练一个简单的分类器
def train_classifier(train_edges, G):
X_train = []
y_train = []
for u, v in train_edges:
# 计算边的相似度
sim = similarity(u, v, G)
# 构造特征向量
X_train.append(sim)
# 标记这条边是否存在
y_train.append(int(G.has_edge(u, v)))
# 使用随机森林训练分类器
from sklearn.ensemble import RandomForestClassifier
clf = RandomForestClassifier(n_estimators=10, random_state=0)
clf.fit(X_train, y_train)
return clf
# 测试分类器的准确率
def test_classifier(test_edges, G, clf):
X_test = []
y_test = []
for u, v in test_edges:
sim = similarity(u, v, G)
X_test.append(sim)
y_test.append(int(G.has_edge(u, v)))
y_pred = clf.predict(X_test)
from sklearn.metrics import accuracy_score
return accuracy_score(y_test, y_pred)
# 训练分类器并测试准确率
clf = train_classifier(train_edges, G)
accuracy = test_classifier(test_edges, G, clf)
print('Accuracy:', accuracy)
```
这个代码示例中,我们使用了四个简单的特征来衡量两个节点之间的相似度:共同邻居数、Jaccard系数、Adamic-Adar指数和Preferential Attachment指数。然后我们使用随机森林分类器训练一个链路预测器,并使用测试集评估其准确率。
网络瓦解代码 python
网络瓦解是一个复杂的问题,其代码实现取决于具体的网络模型和瓦解方式。以下是一个简单的网络瓦解实验的 Python 代码,使用的是 NetworkX 库:
```python
import networkx as nx
import random
# 生成一个随机图
G = nx.gnm_random_graph(100, 150)
# 随机选择一个节点进行删除
node = random.choice(list(G.nodes()))
G.remove_node(node)
# 计算网络连通性
if nx.is_connected(G):
print("网络未瓦解")
else:
print("网络已瓦解")
```
该代码首先生成一个具有 100 个节点和 150 条边的随机图,然后随机选择一个节点进行删除,最后判断网络是否瓦解。这里使用的是最简单的瓦解方式,即删除一个节点。在实际应用中,网络瓦解可能涉及到更加复杂的节点或边的删除方式,需要根据具体情况进行设计。
阅读全文