0

よくわかりません。かなり単純な結合操作のように見えることを実行しようとしていますが、期待どおりに機能していません。pGraphcGraphの 2 つのグラフがあります。それぞれが CSV ファイルからエントリを読み取ることによって構築され、使用されるid値は属性の 1 つから生成されます。pGraphには、属性で完全に具体化されたp個の頂点が含まれ、 cGraphには、同様に定義されたc個の頂点が含まれます。pGraphでは、一貫したID値を使用して、 p個の頂点とc個の頂点の間に定義されたエッジがあります。ただし、cの属性は頂点はcGraphでのみ使用できます。c頂点の属性 ( cGraphから) とp頂点の属性 ( pGraph から) が結合の結果 ( xGraph )で定義されるように、2 つのグラフを結合したいと考えています。

これを達成すると私が考えたコードは次のとおりです。

val xGraph = pGraph.joinVertices(cGraph.vertices){ (x,y,z) => z}

最終的に、デバッグによって、map 関数がまったく呼び出されていないことがわかりました。つまり、明らかにpGraphcGraphに一致する頂点がありませんでした。id値が同じであれば一致するだろうと想定していました。しかし、それは正しくないようです。一致が Vertex の両方のコンポーネント (id と属性) に基づいている場合、もちろん一致はありません。これは、一方の場合は属性が null であり、他方の場合は適切な値であるためです。

私が見つけた結合操作の例は、this入力頂点が異なるグラフからのものではなく、同じであるという意味ですべて自明です。

助言がありますか?

4

1 に答える 1

1

これは私が得るものです:

scala> val g1 = Graph.fromEdges[Double,Double](edges,0.0)
scala> val g2 = Graph.fromEdges[Double,Double](edges,2.0)
scala> val g3 = g1.joinVertices(g2.vertices){ (vid,num1,nu2) => 2.0 }
scala> g3.vertices.toArray.foreach(println(_))
(4,2.0)
(1,2.0)
(5,2.0)
(2,2.0)
(3,2.0)

これは私が期待するものです。

あなたが見ているものを完全に再現するコードを共有できますか?

于 2015-05-02T23:57:45.080 に答える