用Python中的bip geom图绘制尝试

2024-03-28 11:16:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我是2天大的python和一般的编码,我一直在做一个随机几何图形,这是2mode的工作。我一直在看网络代码

我开始使用以下逻辑

import networkx as nx
def my_bipartite_geom_graph(a, b, radius, dim):

G=nx.Graph()
A=nx.Graph()
A.name="a node set"
A.add_nodes_from(range(a)) 
for n in A:
    A.node[n]['pos']=[random.random() for i in range(0,dim)]

B=nx.Graph()
B.name="b node set"
B.add_nodes_from(range(b)) 
for n in B:
    B.node[n]['pos']=[random.random() for i in range(0,dim)]

G=nx.disjoint_union(A,B)

nodesa = A.nodes(data=True)
nodesb = B.nodes(data=True)
while nodesa:
    u,du = nodesa.pop()
    pu = du['pos']
    for v,dv in nodesb:
        pv = dv['pos']
        d = sum(((a-b)**2 for a,b in zip(pu,pv)))
        if d <= radius**2:
            G.add_edge(u,v)
return G

这返回一个图表,但显然不是我所希望的。任何关于如何更好地解决这个问题的建议都将不胜感激。你知道吗

致以最良好的祝愿


Tags: nameinposaddnodeforrangerandom
1条回答
网友
1楼 · 发布于 2024-03-28 11:16:30

问题是nx.disjoint_union对节点重新编号,以便它们是不同的。意思是B[n] != G[n]。因此B中的节点标签包含G图中A的节点。你知道吗

有一种方法可以解决这个问题:

import networkx as nx
def my_bipartite_geom_graph(a, b, radius, dim):

    G=nx.Graph()
    G.add_nodes_from(range(a+b))
    for n in range(a):
        G.node[n]['pos']=[random.random() for i in range(0,dim)]
        G.node[n]['type'] = 'A'

    for n in range(a, a+b):
        G.node[n]['pos']=[random.random() for i in range(0,dim)]
        G.node[n]['type'] = 'B'

    nodesa = [(node, data) for node, data in G.nodes(data=True) if data['type'] == 'A']
    nodesb = [(node, data) for node, data in G.nodes(data=True) if data['type'] == 'B']

    while nodesa:
        u,du = nodesa.pop()
        pu = du['pos']
        for v,dv in nodesb:
            pv = dv['pos']
            d = sum(((a-b)**2 for a,b in zip(pu,pv)))
            if d <= radius**2:
                G.add_edge(u,v)
    return G

相关问题 更多 >