Матрица переходов для взвешенного ориентированного графа - PullRequest
0 голосов
/ 23 сентября 2018

Я хочу построить матрицу перехода для следующего графика, заданного в файле, следующим образом:

1   2   0.9
1   3   0.1
2   1   0.8
2   2   0.1
2   3   0.1
2   4   0.1
3   2   0.5
3   3   0.3
3   4   0.2
4   1   0.1
4   4   0.9

Например, 4 4 0.9 означает дугу от узла 4 к узлу 4 с весом 0,9.Мой первый вопрос, какой должна быть матрица перехода?

Я применяю следующий код:

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)
        #self.og_matrix = og_not_normalized
        print og_not_normalized

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.Graph()
        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()
        return G

Когда я распечатываю матрицу print og_not_normalized, я получаю следующее:

[[0.  0.1 0.8 0.1]
 [0.1 0.3 0.5 0.2]
 [0.8 0.5 0.1 0.1]
 [0.1 0.2 0.1 0.9]]

Порядок столбца и строки 2 4 3 1.Как можно позволить им быть в порядке 1 2 3 4?

...