2016-03-15 217 views
3

我想問一下,如果有同等功能的朱莉婭語言及其functions稀疏矩陣來to_scipy_sparse_matrixnetworkx to_scipy_sparse_matrix。類似的功能在朱莉婭稀疏矩陣功能

我在尋找相當於在eigenvector centrality algorithm調用此函數。

是否有可能運行此功能,如上所述,在特徵向量中心性鏈接中,在Julia中產生相同的輸出?

感謝您的任何建議。我正在爲此苦苦掙扎幾個小時,我無法做出任何結果。

編輯:

Python version : 
import networkx as nx 
import scipy 

G = nx.Graph() 
G.add_edge(1, 2, w=1.0) 
G.add_edge(1, 3, w=0.5) 
G.add_edge(2, 3, w=2.5) 

M = nx.to_scipy_sparse_matrix(G, nodelist=list(G), weight='w',dtype=float) 

print(M) 

Output: 
(0, 1) 1.0 
(0, 2) 0.5 
(1, 0) 1.0 
(1, 2) 2.5 
(2, 0) 0.5 
(2, 1) 2.5 

Julia version: 
using Graphs 

g1 = Graphs.graph(Graphs.ExVertex[], Graphs.ExEdge{Graphs.ExVertex}[],  is_directed=false) 
d = "dist" 

v1 = add_vertex!(g1, "a") 
v2 = add_vertex!(g1, "b") 
v3 = add_vertex!(g1, "c") 

e12 = add_edge!(g1, v1, v2) 
e12.attributes[d]=1.0 

e13 = add_edge!(g1, v1, v3) 
e13.attributes[d]=0.5 

e23 = add_edge!(g1, v2, v3) 
e23.attributes[d]=2.5 
+0

如果'g'是曲線圖中,有可能得到天真地稀疏鄰接矩陣爲'A =稀疏(adjacency_matrix(克) )'(使用'Graphs.jl') –

+0

但是如果圖是加權的呢? networkx中的函數返回一個矩陣和一些我認爲已連接或正在表示權重的矢量。 –

+0

如果您包含Julia代碼來構建要生成稀疏矩陣的示例圖(您可以編輯該問題),那將是最容易的。這些操縱通常是漂亮的單線。 –

回答

1

嘗試(以下OP朱莉婭代碼):

julia> triple(e,d) = (e.source.index,e.target.index,e.attributes[d]) 
triple (generic function with 1 method) 

julia> M = sparse(map(collect,zip([triple(e,d) for e in edges(g1)]...))...,length(g1.vertices),length(g1.vertices)) 
    2x3 sparse matrix with 3 Float64 entries: 
    [1, 2] = 1.0 
    [1, 3] = 0.5 
    [2, 3] = 2.5 

triple返回一個(源,目標,d-屬性)三重可能進入室內有用在其他地方也是如此。

稀疏矩陣與sparse(I,J,D,rows,cols)構造其中I,J,D都是相同長度的載體和用於它們每個索引i,所述基質具有在I[i],J[i]位置的D[i]值創建的。

如果需要對稱權重矩陣,使用以下:

julia> M = M+M' 
3x3 sparse matrix with 6 Float64 entries: 
    [2, 1] = 1.0 
    [3, 1] = 0.5 
    [1, 2] = 1.0 
    [3, 2] = 2.5 
    [1, 3] = 0.5 
    [2, 3] = 2.5 
+0

您能不能先通過密集表示再次提供您的最後一個製作稀疏矩陣的方法?我想更深入地喜歡它。我會回答這個答案,但我不認爲這會給我正確的結果。接下來將從這個矩陣中計算特徵值和特徵向量,所以我將需要輸出,正如它在Python中所述。我不知道爲什麼Python代碼中的M矩陣具有與Julia中構造的相同圖的這種值。 –

+0

該評論與此處的答案相同(僅將「triple」分成單獨的函數)。這裏和python中的輸出是相同的,唯一的區別在於稀疏矩陣的打印格式,並且python矩陣是對稱的(因此6個值而不是3個)。矩陣的對稱與M = M + M'一樣簡單。 –

+0

非常感謝。 Python必須將0中的頂點和1中的Julia建立索引,或者我的假設是錯誤的?我想知道代表這些數字對的是什麼。 –