2017-06-01 7 views
0

julia LightGraphsのweakly_connected_componentsは、DiGraphが無向グラフになっている場合に各コンポーネントを接続する必要がある接続コンポーネントを提供する必要がありますか? 私はこれを試しましたが、私はそのようなコンポーネントを受け取りませんか?いくつかのノードが何を持ってsignigiesないJulia LightGraphs weakly_connected_components

isempty([i for i in vertices(temp_net) if isempty(edges(temp_net).adj[i])]) 

julia>false 

:例として、私は無向ネットワーク

data=readdlm(path,',',Int64) #contains edges in each row 
N_ = length(unique(vcat(data[:,1],data[:,2]))) ##to get number of vertices 
network = LightGraphs.DiGraph(N_) 
#construct the network 
for i in 1:size(data,1) 
    add_edge!(network, Edge(data[i,1], data[i,2])) 
end 
#largest weakly connected component 
net = weakly_connected_components(network)[1] 
temp_net,vmap = induced_subgraph(network, net) 

として最も大きいの弱連結成分を取得した後の政治ブログデータでこれを試してみましたが、私は以下を参照してください。着信または発信エッジ。 何が問題なのですか?私は最新のリリース6を使用していますが、LightGraphsパッケージのテストは機能しているようです。

答えて

1

TL:DRの回答は、iに接続するものではなく、iに接続する頂点のみを含むedges(temp_net).adj[i]です。また、いくつかの頂点にはエッジがありません。

より長いバージョンはランダムに生成されたネットワークでtemp_netを示し、実際に弱く接続されているように割り当てられます。最初にランダムなネットワークを構築:

julia> length(vertices(temp_net)) 
814 

julia> invertices = union((edges(temp_net).adj[i] for i in vertices(temp_net))...); 

julia> outvertices = [i for i in vertices(temp_net) if !isempty(edges(temp_net).adj[i])] ; 

julia> length(union(invertices,outvertices)) 
814 

したがって、すべての814個の頂点のいずれかからエッジを持っているし、またはそれら(あるいはその両方)へと弱いの一部である:今

julia> using LightGraphs 

julia> N_ = 1000 ; 

julia> network = LightGraphs.DiGraph(N_) 
{1000, 0} directed simple Int64 graph 

julia> using Distributions 

julia> for i in 1:N_ 
      add_edge!(network, sample(1:N_,2)...) 
     end 

julia> net = weakly_connected_components(network)[1] 

julia> temp_net,vmap = induced_subgraph(network, net) 
({814, 978} directed simple Int64 graph, [1, 3, 4, 5, 6, 9, 10, 11, 12, 13 … 989, 990, 991, 993, 995, 996, 997, 998, 999, 1000]) 

そして、我々は持っています接続されたコンポーネント。

5

@ dan-getzに加えて、構造の内部データフィールドにアクセスしないことを奨励する必要があります。私たちはすべての "public"のアクセサを持っています。具体的には、edges(temp_net).adjは利用可能であるとは限りません。有向グラフと無向グラフの両方について、fadj(g)と同じ順方向隣接リストgと同じですが、エッジ反復状態を維持するのを除いては使用されません。

.adjを使用すると、コードが警告なしで途切れることがあります。