【发布时间】:2021-03-13 06:56:08
【问题描述】:
我目前正在学习我的大学专题。我的问题是我可以删除所有我不想要的节点,但我想保留一些特定的节点。这是我的做法。
1.将gml读入networkx
2.使用此代码删除我不想要的网站,然后将其写入新的 gml 文件
import networkx as nx
G = nx.read_gml('test.gml')
for i in range(2000):
for node in G.nodes:
if "pu.edu.tw" not in node:
G.remove_node(node)
break
nx.write_gml(G,"finaltest.gml")
3.你可以看到这个gml文件的一部分,我成功地保留了所有'pu.edu.tw'网站
graph [
directed 1
multigraph 1
node [
id 0
label "https://www.pu.edu.tw/"
]
node [
id 1
label "https://alumni.pu.edu.tw/"
]
node [
id 2
label "https://freshman.pu.edu.tw/"
]
node [
id 3
label "https://tdc.pu.edu.tw/"
]
node [
id 4
label "https://alcat.pu.edu.tw/"
]
node [
id 5
label "https://www.secretary.pu.edu.tw/"
]
node [
id 6
label "https://pugive.pu.edu.tw/"
]
4.问题是当我尝试用networkx绘制这个gml文件时,我得到了一些没有egdes的节点
5.我发现原因是我删除了与'pu.edu.tw'相关的链接,所以缺少一些egdes
我想知道如何不仅删除我不想要的网站并保留与“pu.edu.tw”相关的特定节点,这样边缘就不会丢失。或以某种方式重新连接节点。谢谢。
----------------------------------------------- ----------------------------------
更新一个新问题.... 如果我想添加多个条件,比如
def cleanup(g):
g_aux = g.to_undirected()
for node in g_aux.nodes:
if ("tku.edu.tw"or"scu.edu.tw"or"cycu.edu.tw"or"fcu.edu.tw") not in node:
for neighbor in g_aux.neighbors(node):
if "tku.edu.tw"or"scu.edu.tw"or"cycu.edu.tw"or"fcu.edu.tw" in neighbor:
break
else:
g.remove_node(node)
这是正确的做法吗?
【问题讨论】:
-
所以,这个孤儿属于“pu.edu.tw”,但只连接到不是来自该网站的节点,您想创建替代这种间接连接的边吗?说,有节点'A.pu.edu.tw'--B.oth--C.oth--D.pu.edu.tw,那么你要添加边A--C吗?
-
是的!这就是我现在要做的。
-
是的,如果您希望节点具有任何这些 ID,这就是这样做的方法
标签: python networkx spyder gml