-
Notifications
You must be signed in to change notification settings - Fork 0
/
verticelabel.py
61 lines (45 loc) · 1.47 KB
/
verticelabel.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
# -*- coding: utf-8 -*-
import numpy as np
def vertice_label(As, Vs):
global Label_Dim
Vmap = {}
Vmap_index = 0
# get vertice map
for ii in xrange(len(Vs)):
for jj in xrange(len(Vs[ii])):
if not Vmap.has_key(Vs[ii][jj]):
Vmap[Vs[ii][jj]] = Vmap_index
Vmap_index += 1
# combined adjacent index
N = len(Vmap.keys())
Ac = np.zeros([N, N], dtype=float)
for ii in xrange(len(As)):
for key1 in Vmap.keys():
for key2 in Vmap.keys():
if key1 != key2:
A = As[ii][Vs[ii] == key1][:, Vs[ii] == key2]
Ac[Vmap[key1], Vmap[key2]] += A.sum()
Ac[Vmap[key2], Vmap[key1]] += A.sum()
# node embedding
eig_vals, eig_vecs = np.linalg.eig(Ac)
eig_index = eig_vals.argsort()[::-1]
dim = min(Label_Dim, len(eig_index) - 1)
labels = eig_vecs[eig_index[0: dim], :].T
# map the labels
Vs_return = []
for ii in xrange(len(Vs)):
Vs_return.append(np.zeros([len(Vs[ii]), dim], dtype=float))
for jj in xrange(len(Vs[ii])):
Vs_return[ii][jj, :] = labels[Vmap[Vs[ii][jj]]]
# return
return Vs_return
def vertice_reshape(Vs):
Vs = list(Vs)
for ii in xrange(len(Vs)):
Vs[ii] = Vs[ii].reshape(-1, 1)
return Vs
Label_Dim = 0
def init():
global Label_Dim
Label_Dim = 2
init()