Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
William Weir committed Jul 4, 2019
2 parents 23bb0d4 + 1cc63f6 commit c56073a
Show file tree
Hide file tree
Showing 2 changed files with 66 additions and 3 deletions.
68 changes: 66 additions & 2 deletions modbp/GenerateGraphs.py
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,11 @@ def __init__(self,intralayer_edges,layer_vec,interlayer_edges=None,comm_vec=None
"""

self.N=len(layer_vec)
self.layer_vec=np.array([int(x) for x in layer_vec]) #NEEDS to be integer valued.
layers=np.unique(layer_vec)
#assure that it is sorted by appearance with elements from 0 to len(nlayers)
layer_dict=dict(zip(layers,range(len(layers))))
self.layer_vec=np.array([layer_dict[x] for x in layer_vec])

self.intralayer_edges=intralayer_edges
self.is_directed=directed
self.unweighted=True
Expand Down Expand Up @@ -484,6 +488,52 @@ def _to_sparse(self,intra=True):

return scispa.csr_matrix((data,(row_ind,col_ind)),shape=(N,N),dtype=float)

def reorder_nodes(self):
"""
Resort all objects in the MultilayerGraph object by their community label
:return:
"""
new_com_vec=np.array([])
A_old,C_old=self.to_scipy_csr()

offset=0
total_perm_vec=[]

for i,layer in enumerate(self.layers):
cinds=np.where(self.layer_vec==i)[0]
ccom_vec=self.comm_vec[cinds]
#zip sort, unzip
if i==0:
c_new_comvec,cperm_vec=list(zip(*sorted(zip(ccom_vec,range(offset,len(ccom_vec)+offset)),key=lambda x:x[0])))
rev_perm_vec = [-1 for _ in range(len(cperm_vec))]
for j, val in enumerate(cperm_vec):
rev_perm_vec[val - offset] = j + offset # offset for nodes in previous layers
assert -1 not in rev_perm_vec
else:
c_new_comvec = [0 for _ in range(len(ccom_vec))]
#use the old rev_perm_vec for permuting this layer (just offset new values)
for j,val in enumerate(rev_perm_vec):
rev_perm_vec[j]=val+len(cinds)
for j,val in enumerate(ccom_vec):
c_new_comvec[rev_perm_vec[j]-offset]=val

new_com_vec=np.append(new_com_vec,c_new_comvec)
total_perm_vec+=rev_perm_vec
offset+=len(cinds)


new_intra_elist=[(total_perm_vec[e[0]],total_perm_vec[e[1]],self.intralayer_weights[i])\
for i,e in enumerate(self.intralayer_edges)]
new_inter_elist = [(total_perm_vec[e[0]], total_perm_vec[e[1]], self.interlayer_weights[i]) \
for i,e in enumerate(self.interlayer_edges)]

#reset with new permuted edges
self.__init__(intralayer_edges=new_intra_elist,layer_vec=self.layer_vec,interlayer_edges=new_inter_elist,
comm_vec=new_com_vec)




def to_scipy_csr(self):
"""Create sparse matrix representations of the multilayer network.
Expand Down Expand Up @@ -833,4 +883,18 @@ def generate_planted_partitions_dynamic_sbm(n, epsilon, c, ncoms,nlayers,eta):
dsbm = MultilayerSBM(n, comm_prob_mat=prob_mat, layers=nlayers, block_sizes0=nodesperblock,
transition_prob=eta, use_gcc=False)

return dsbm
return dsbm

def adjacency_to_edges(A,directed=False):
"""Extract list of non zero values from adjacency, handling directedness."""
if not directed:
try:
nnz_inds=np.nonzero(np.triu(A))
except:
nnz_inds=np.nonzero(scispa.triu(A))
else:
nnz_inds = np.nonzero(A)
nnzvals = np.array(A[nnz_inds])
if len(nnzvals.shape) > 1:
nnzvals = nnzvals[0] # handle scipy sparse types
return list(zip(nnz_inds[0], nnz_inds[1], nnzvals))
1 change: 0 additions & 1 deletion test/genlouvain_mlsbm/call_matlab_genlouvain.sh
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ homedir='/nas/longleaf/home/wweir/ModBP_proj/ModularityBP_Cpp'
#homedir='/Users/whweir/Documents/UNC_SOM_docs/Mucha_Lab/Mucha_Python/ModBP_gh/ModularityBP_Cpp'


matlab_func_file="${homeddir}/test/genlouvain_mlsbm/run_gen_louvain.m"
export MATLABPATH="${homedir}/test/genlouvain_mlsbm/"
export MATLABPATH="${MATLABPATH}:${homedir}/test/genlouvain_mlsbm/GenLouvain-master"

Expand Down

0 comments on commit c56073a

Please sign in to comment.