-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgenerate_synthtic_graph.py
75 lines (39 loc) · 1.41 KB
/
generate_synthtic_graph.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import networkx as nx
import numpy as np
from networkx.generators import erdos_renyi_graph
import sys
attribute_size = 1000
def generate_graphs(num_nodes, density):
G = erdos_renyi_graph(num_nodes,density)
# features for each node
fea_matrix = np.random.choice(attribute_size,(num_nodes,10))
# labels
label = np.random.choice(6,num_nodes)
return G, fea_matrix, label
def save_graph(num_nodes,density,G,fea_matrix,label):
#save edges
wp = open('synthetic_{}_{}.edge'.format(num_nodes,density),'w')
wp.write("#Nodes {}\n".format(num_nodes))
wp.write("#Edges {}\n".format(len(G.edges)))
for e in G.edges:
wp.write("{}\t{}\n".format(e[0],e[1]))
wp.close()
#save node
wp = open('synthetic_{}_{}.node'.format(num_nodes,density),'w')
wp.write("#Nodes {}\n".format(num_nodes))
wp.write("#Attributes {}\n".format(attribute_size))
for n in range(num_nodes):
for attr in fea_matrix[n]:
wp.write("{}\t{}\n".format(n,attr))
wp.close()
#save label
wp = open('synthetic_{}_{}.label'.format(num_nodes,density),'w')
for n in label:
wp.write("{}\n".format(n))
wp.close()
if __name__=="__main__":
num_nodes = int(sys.argv[1])
density = float(sys.argv[2])
G,fea_matrix,label = generate_graphs(int(num_nodes),float(density))
save_graph(num_nodes,density,G,fea_matrix,label)
print("Done")