तो एक जाली पर विचार करें जहां प्रत्येक किनारा द्वि-दिशात्मक है। अब मेरे पास कुछ कोड है जो द्वि-दिशात्मक किनारों के प्रतिशत को कम करने और यूनी-दिशात्मक किनारों के प्रतिशत को बढ़ाने के लिए कुछ किनारों को हटा देता है:

import networkx as nx
import matplotlib.pyplot as plt
import numpy as np
from random import shuffle

G = nx.grid_2d_graph(20,20, periodic=True)
G = nx.relabel.convert_node_labels_to_integers(G)
G2 = nx.DiGraph(G)
nx.set_edge_attributes(G2, values = 1, name = 'weight')
edge_list = list(G2.edges())
shuffle(edge_list)

remove_list = []
seen = []

for (u,v) in edge_list:
    seen.append((u,v))
    if (v,u) in edge_list:
        if (v,u) not in seen:
            sample = rd.sample([(u,v), (v,u)],1)[0]
            if len(remove_list)< 0.8*(len(edge_list)/2):
                remove_list.append(sample)
            else:
                break

G2.remove_edges_from(remove_list)

अब मैंने उन किनारों को सहेजा है जो एक सूची में एक-दिशात्मक हैं:

H = [(u,v) for (u,v) in G2.edges if (v,u) not in G2.edges]

H[:10]

[(0, 20),
 (0, 1),
 (0, 380),
 (1, 2),
 (2, 22),
 (2, 382),
 (3, 4),
 (5, 4),
 (5, 25),
 (5, 6)]

अब मैं जो करना चाहता हूं वह इस जाली को प्लॉट करना है:

edge_color = ['red' if (u,v) in H else 'black' for (u,v) in G2.edges] ## uni-directional edges will be red and bi-directional ones will be black

pos = {(x,y):(y,-x) for x,y in product(range(size), range(size))}
pos1 = {i: value for i, value in zip(range(size**2), pos.values())}## assign the nodes to their positions

plt.figure(figsize=(40, 40)) 
nx.draw(G2,node_size=3000,node_color='lightgreen', with_labels=True, pos=pos1, width=5, edge_color = edge_color)

इसके साथ समस्या यह है कि भूखंड में मेरे लाल किनारे हैं जो द्वि-दिशात्मक हैं जो गलत है< img alt="यहां छवि विवरण दर्ज करें" src="https://i.stack.imgur.com/jMF3F.png"/>

enter image description here

आइए प्लॉट के साथ H[:10] के आउटपुट की तुलना करें:

जैसा कि आप देख सकते हैं कि किनारे (0,1) को सही ढंग से चित्रित किया गया है, लेकिन इसमें दो तीर हैं जो इसे द्वि-दिशात्मक इंगित करते हैं, भले ही यह नहीं है। एक अन्य उदाहरण किनारा (1,21) है जो एक द्वि-दिशात्मक है और लाल रंग से रंगा गया है। क्या कोई इसे ठीक करने में मेरी मदद कर सकता है?

3
DPM 10 मार्च 2021, 02:20

1 उत्तर

एक समस्या यह है कि आप G2.edges को एक सूची के रूप में उपयोग कर रहे हैं जो कि नहीं है। तो कहना (u,v) in G2.edges आइटम सदस्यता की जांच नहीं कर रहा है जिससे आपकी एच सूची गलत हो रही है। तो आप बस कर सकते हैं:

H = [(u,v) for (u,v) in G2.edges if (v,u) not in list(G2.edges)]

मुझे यकीन नहीं है कि यह आपकी समस्या को पूरी तरह हल करता है, लेकिन कम से कम उस एक मुद्दे को हल करता है।

0
GIOVANNI QUINONES VALDEZ 12 मार्च 2021, 02:47