Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def _build_og(self, original_ppi):
- """ Build the original graph, without any nodes removed. """
- try:
- graph_fp = open(original_ppi, 'r')
- except IOError:
- sys.exit("Could not open file: {}".format(original_ppi))
- G = nx.DiGraph()
- edge_list = []
- # parse network input
- for line in graph_fp.readlines():
- split_line = line.rstrip().split('t')
- # assume input graph is a simple edgelist with weights
- edge_list.append((split_line[0], split_line[1], float(split_line[2])))
- G.add_weighted_edges_from(edge_list)
- graph_fp.close()
- print edge_list
- return G
- 1 1 0.9
- 1 2 0.075
- 1 3 0.25
- 2 1 0.15
- 2 2 0.8
- 2 3 0.05
- 3 1 0.25
- 3 2 0.25
- 3 3
- def _build_matrices(self, original_ppi):
- """ Build column-normalized adjacency matrix for each graph.
- NOTE: these are column-normalized adjacency matrices (not nx
- graphs), used to compute each p-vector
- """
- original_graph = self._build_og(original_ppi)
- self.OG = original_graph
- og_not_normalized = nx.to_numpy_matrix(original_graph)
- self.og_matrix = self._normalize_cols(og_not_normalized)
- def run_exp(self, source):
- CONV_THRESHOLD = 0.000001
- # set up the starting probability vector
- p_0 = self._set_up_p0(source)
- diff_norm = 1
- # this needs to be a deep copy, since we're reusing p_0 later
- p_t = np.copy(p_0)
- while (diff_norm > CONV_THRESHOLD):
- # first, calculate p^(t + 1) from p^(t)
- p_t_1 = self._calculate_next_p(p_t, p_0)
- # calculate L1 norm of difference between p^(t + 1) and p^(t),
- # for checking the convergence condition
- diff_norm = np.linalg.norm(np.subtract(p_t_1, p_t), 1)
- # then, set p^(t) = p^(t + 1), and loop again if necessary
- # no deep copy necessary here, we're just renaming p
- p_t = p_t_1
- def _set_up_p0(self, source):
- """ Set up and return the 0th probability vector. """
- p_0 = [0] * self.OG.number_of_nodes()
- # convert self.OG.number_of_nodes() to list
- l = list(self.OG.nodes())
- #nx.draw(self.OG, with_labels=True)
- #plt.show()
- for source_id in source:
- try:
- # matrix columns are in the same order as nodes in original nx
- # graph, so we can get the index of the source node from the OG
- source_index = l.index(source_id)
- p_0[source_index] = 1 / float(len(source))
- except ValueError:
- sys.exit("Source node {} is not in original graph. Source: {}. Exiting.".format(source_id, source))
- return np.array(p_0)
- def _calculate_next_p(self, p_t, p_0):
- """ Calculate the next probability vector. """
- print 'p_0t{}'.format(p_0)
- print 'p_tt{}'.format(p_t)
- epsilon = np.squeeze(np.asarray(np.dot(self.og_matrix, p_t)))
- print 'epsilont{}'.format(epsilon)
- print 10*"*"
- return np.array(epsilon)
- p_0 [0. 1. 0.]
- p_t [0. 1. 0.]
- epsilon [0.3125 0.625 0.0625]
- **********
- p_0 [0. 1. 0.]
- p_t [0.3125 0.625 0.0625]
- epsilon [0.41582532 0.46461004 0.11956464]
- **********
- p_0 [0. 1. 0.]
- p_t [0.41582532 0.46461004 0.11956464]
- epsilon [0.44104068 0.3969176 0.16204171]
- **********
- p_0 [0. 1. 0.]
- p_t [0.44104068 0.3969176 0.16204171]
- epsilon [0.44017539 0.36889829 0.19092632]
- **********
- p_0 [0. 1. 0.]
- p_t [0.44017539 0.36889829 0.19092632]
- epsilon [0.43274594 0.35763862 0.20961544]
- **********
- p_0 [0. 1. 0.]
- p_t [0.43274594 0.35763862 0.20961544]
- epsilon [0.42532978 0.35332572 0.22134451]
- **********
- p_0 [0. 1. 0.]
- p_t [0.42532978 0.35332572 0.22134451]
- epsilon [0.41962966 0.35181043 0.22855991]
- **********
- p_0 [0. 1. 0.]
- p_t [0.41962966 0.35181043 0.22855991]
- epsilon [0.41569093 0.35137062 0.23293845]
- **********
- p_0 [0. 1. 0.]
- p_t [0.41569093 0.35137062 0.23293845]
- epsilon [0.41311858 0.3513113 0.23557012]
- **********
- p_0 [0. 1. 0.]
- p_t [0.41311858 0.3513113 0.23557012]
- epsilon [0.41149463 0.35136436 0.23714102]
- **********
- p_0 [0. 1. 0.]
- p_t [0.41149463 0.35136436 0.23714102]
- epsilon [0.41049166 0.35143431 0.23807403]
- **********
- p_0 [0. 1. 0.]
- p_t [0.41049166 0.35143431 0.23807403]
- epsilon [0.40988136 0.35149249 0.23862616]
- **********
- p_0 [0. 1. 0.]
- p_t [0.40988136 0.35149249 0.23862616]
- epsilon [0.40951383 0.35153418 0.23895199]
- **********
- p_0 [0. 1. 0.]
- p_t [0.40951383 0.35153418 0.23895199]
- epsilon [0.40929414 0.35156196 0.2391439 ]
- **********
- p_0 [0. 1. 0.]
- p_t [0.40929414 0.35156196 0.2391439 ]
- epsilon [0.40916352 0.35157973 0.23925675]
- **********
- p_0 [0. 1. 0.]
- p_t [0.40916352 0.35157973 0.23925675]
- epsilon [0.40908617 0.35159079 0.23932304]
- **********
- p_0 [0. 1. 0.]
- p_t [0.40908617 0.35159079 0.23932304]
- epsilon [0.40904049 0.35159756 0.23936195]
- **********
- p_0 [0. 1. 0.]
- p_t [0.40904049 0.35159756 0.23936195]
- epsilon [0.40901358 0.35160165 0.23938477]
- **********
- p_0 [0. 1. 0.]
- p_t [0.40901358 0.35160165 0.23938477]
- epsilon [0.40899775 0.35160411 0.23939815]
- **********
- p_0 [0. 1. 0.]
- p_t [0.40899775 0.35160411 0.23939815]
- epsilon [0.40898845 0.35160557 0.23940599]
- **********
- p_0 [0. 1. 0.]
- p_t [0.40898845 0.35160557 0.23940599]
- epsilon [0.40898299 0.35160643 0.23941058]
- **********
- p_0 [0. 1. 0.]
- p_t [0.40898299 0.35160643 0.23941058]
- epsilon [0.40897978 0.35160695 0.23941327]
- **********
- p_0 [0. 1. 0.]
- p_t [0.40897978 0.35160695 0.23941327]
- epsilon [0.40897791 0.35160725 0.23941485]
- **********
- p_0 [0. 1. 0.]
- p_t [0.40897791 0.35160725 0.23941485]
- epsilon [0.4089768 0.35160743 0.23941577]
- **********
- p_0 [0. 1. 0.]
- p_t [0.4089768 0.35160743 0.23941577]
- epsilon [0.40897616 0.35160753 0.23941631]
- **********
- p_0 [0. 1. 0.]
- p_t [0.40897616 0.35160753 0.23941631]
- epsilon [0.40897578 0.35160759 0.23941662]
- **********
- 1 0.41
- 3 0.35
- 2 0.24
Add Comment
Please, Sign In to add comment