2016-07-06 41 views
0

在igraph中讀取我的二分矩陣時遇到問題。我創建使用Networkx二分圖和導出它們作爲biadjacency矩陣:使用igraph使用Networkx創建的二分圖

data <-readMat("graphToMatlab1.mat") 
    data1 <- data$graphToMatlab[[1]][[1]] 
    graph <- graph_from_adjacency_matrix(data1, mode="undirected") 

這裏是稀疏矩陣:

bipartite.biadjacency_matrix(Graph[i],row_order=bipartite.sets(stockGraph[i])[0], column_order=bipartite.sets(stockGraph[i])[1],format='csr') 

然後我使用的igraph導入R中的10×10矩陣

data1 10 x 10稀疏矩陣類「dgCMatrix」

[1,] 1 . . . . . . . . . 
[2,] . . . . 1 . . . . . 
[3,] . . 1 . . 1 . . . . 
[4,] . . . . 1 . 1 1 . . 
[5,] . . . . . . . . . 1 
[6,] . . 1 1 . . 1 . 1 . 
[7,] . . 1 1 1 2 . . . . 
[8,] . . 1 . . 1 . . . . 
[9,] . . 1 1 . . . 1 . . 
[10,] . 2 . . . . . . . . 

IGRAPH U--- 10 21 -- 
+ edges: 
[1] 1-- 1 2-- 5 2--10 2--10 3-- 3 3-- 6 3-- 7 3-- 8 3-- 9 4-- 5 4-- 6 4-- 7 4-- 8 4-- 9 5-- 7 5--10 6-- 7 6-- 7 6-- 8 6-- 9 
[21] 8-- 9 

因此,這是錯誤的,因爲它沒有考慮到,有兩種類型的頂點(缺少的屬性部分)。所以我認爲這是因爲我輸出圖的方式(使用bipartite.biadjacency matrix),但是有沒有辦法繞過這個問題?要麼igraph讀取矩陣,要麼我在Networkx中導出數據?

回答

1

你可能只是想你的二分圖

In [1]: import networkx as nx 

In [2]: G = nx.complete_bipartite_graph(5,3) 

In [3]: nx.adjacency_matrix(G,nodelist=range(8)).todense() 
Out[3]: 
matrix([[0, 0, 0, 0, 0, 1, 1, 1], 
     [0, 0, 0, 0, 0, 1, 1, 1], 
     [0, 0, 0, 0, 0, 1, 1, 1], 
     [0, 0, 0, 0, 0, 1, 1, 1], 
     [0, 0, 0, 0, 0, 1, 1, 1], 
     [1, 1, 1, 1, 1, 0, 0, 0], 
     [1, 1, 1, 1, 1, 0, 0, 0], 
     [1, 1, 1, 1, 1, 0, 0, 0]], dtype=int64) 

的鄰接矩陣表示的biadjacency格式只有鄰接矩陣

In [4]: from networkx.algorithms.bipartite import biadjacency_matrix 

In [5]: biadjacency_matrix(G,range(5)).todense() 
Out[5]: 
matrix([[1, 1, 1], 
     [1, 1, 1], 
     [1, 1, 1], 
     [1, 1, 1], 
     [1, 1, 1]], dtype=int64) 
+0

感謝您的一個部分,它的工作!我在一個循環中導出矩陣,導致列類型丟失。我只做了'g = bipartite.biadjacency_matrix(G,row_order = bipartite.sets(stockGraph [i])[0], column_order = bipartite.sets(stockGraph [i])[1]).todense()' 所以我刪除了格式='csr')從bipartite.adjacency矩陣),它的工作! – user3767071