Python 如何从单一网络中提取正负子网络

Python 如何从单一网络中提取正负子网络,python,networkx,canopy,Python,Networkx,Canopy,通过这段代码,我找到了所有子图的列表,然后尝试提取所有正子网和负子网,但没有找到任何逻辑,有人能帮我吗 import networkx as nx from networkx.algorithms.components.connected import connected_components import matplotlib.pyplot as plt G = nx.read_edgelist('/home/suman/Desktop/dataset/CA-GrQc.txt', create

通过这段代码,我找到了所有子图的列表,然后尝试提取所有正子网和负子网,但没有找到任何逻辑,有人能帮我吗

import networkx as nx
from networkx.algorithms.components.connected import connected_components
import matplotlib.pyplot as plt
G = nx.read_edgelist('/home/suman/Desktop/dataset/CA-GrQc.txt', create_using = None, nodetype=int,edgetype=int) 
H=nx.connected_component_subgraphs(G)
for i in H:
    print list(i)  
pos=nx.spring_layout(G) 
nx.draw(G,pos=pos)
nx.draw_networkx_labels(G,pos=pos)
plt.show()

我想你想要的是创建一个只由负边组成的网络和一个只由正边组成的网络

如果是这样的话,这里有一些代码可以做到这一点(编辑来解释
添加边
可以处理加权边这一事实-我误读了文档):

G=nx.Graph()
G.从([(1,3)、(2,4)、(3,5)、(4,6)]中添加边,权重=1)
G.从([(1,2)、(2,3)、(3,4)、(4,5)]中添加边,权重=-1)
pos_edges=[(u,v,w)表示G中的(u,v,w)边(数据=真),如果w['weight']>0]
负_边=[(u,v,w)对于G边中的(u,v,w)如果w['weight'][(1,2,{'weight':-1},[u,v,w])(数据=真),
(2,3,{'weight':-1}),
(3,4,{'weight':-1}),
(4,5,{'weight':-1})]
Hpos.edges(数据=真)
>[(1,3,{'weight':1}),
(2,4,{'weight':1}),
(3,5,{'weight':1}),
(4,6,{'weight':1})]

请让我知道这是否是您想要的。我现在必须走了,所以我不能给出详细的解释,但是如果您对什么是有意义的/没有意义的有一些评论,我将在稍后作出回应。

您能给出一个输入示例和所需输出示例吗?您的代码现在只需要查找通过ed连接的组件ges(不考虑它们的符号)。你想只取由正边和负边组成的子网络,然后找到它们的组件吗?让我解释一下,我想从任何网络数据集(如()中)找到正链接、负链接和反向链接如果你能给出一个简单的例子,那就更清楚了:。说你想找到一个积极的链接不同于说你想找到一个积极的子网络。你能给出一个具体的小例子吗?先生,实际上我正试图在这里上传一张图片来解释我的问题,但我无法上传。请让我知道我的nswer是否解决了您的问题。(如果确实解决了,请“接受”答案-您也应该在上一个关于从网络中删除节点的问题上这样做)如果网络列表没有权重,则应用什么条件。例如,如果我在文本文件中有一个仅包含edgelist的网络数据集,则在这里我无法应用(w['weight']>0)条件。那么我在这里所做的我不明白。请给出一个清楚的例子,说明你的输入和你想要的输出是什么。
G=nx.Graph()
G.add_edges_from([(1,3),(2,4),(3,5),(4,6)], weight = 1)
G.add_edges_from([(1,2),(2,3),(3,4),(4,5)], weight = -1)

pos_edges = [(u,v,w) for (u,v,w) in G.edges(data=True) if w['weight']>0]
neg_edges = [(u,v,w) for (u,v,w) in G.edges(data=True) if w['weight']<0]

Hpos = nx.Graph()
Hneg = nx.Graph()

Hpos.add_edges_from(pos_edges)
Hneg.add_edges_from(neg_edges)

Hneg.edges(data=True)
> [(1, 2, {'weight': -1}),
 (2, 3, {'weight': -1}),
 (3, 4, {'weight': -1}),
 (4, 5, {'weight': -1})]
Hpos.edges(data=True)
> [(1, 3, {'weight': 1}),
 (2, 4, {'weight': 1}),
 (3, 5, {'weight': 1}),
 (4, 6, {'weight': 1})]