Output dari modul generate_adjlist() networkx agak aneh dan saya mencoba mendapatkan daftar kedekatan grafik saya dalam bentuk daftar atau array numpy. Bagaimana cara melakukannya? Setiap tip dihargai. Terima kasih.

G = nx.lollipop_graph(4, 3)
for line in nx.generate_adjlist(G):
print(line)
[0] 
0 1 2 3
1 2 3
2 3
3 4
4 5
5 6
6
1
ForumWhiner 23 Juli 2020, 21:25

1 menjawab

Jawaban Terbaik

nx.generate_adjlist mengembalikan garis grafik, dalam format daftar kedekatan. Anda dapat membuat daftar bersarang dari hasil dengan:

G = nx.lollipop_graph(4, 3)
np.array(list(nx.generate_adjlist(G)))
# array(['0 1 2 3', '1 2 3', '2 3', '3 4', '4 5', '5 6', '6'], dtype='<U7')

Array numpy cocok untuk struktur data yang homogen, yaitu untuk daftar dengan daftar dalam berukuran sama. Jika Anda mencoba membuat larik dari berikut ini, Anda akan melihat bahwa Anda mendapatkan larik daftar. Yang dapat Anda lakukan adalah membuat daftar bersarang dari hasil dengan:

list(map(str.split, nx.generate_adjlist(G)))
[['0', '1', '2', '3'],
 ['1', '2', '3'],
 ['2', '3'],
 ['3', '4'],
 ['4', '5'],
 ['5', '6'],
 ['6']]

Sesuai pertanyaan yang disebutkan dalam komentar, kami dapat memperoleh kamus yang disebutkan sebagai (perhatikan bahwa secara efektif daftar akan diindeks dengan cara yang sama):

dict(enumerate(map(str.split, nx.generate_adjlist(G))))
{0: ['0', '1', '2', '3'],
 1: ['1', '2', '3'],
 2: ['2', '3'],
 3: ['3', '4'],
 4: ['4', '5'],
 5: ['5', '6'],
 6: ['6']} 
1
yatu 23 Juli 2020, 18:42