当前位置: 首页 > 知识库问答 >
问题:

图间结构算子

孟晋
2023-03-14

我们认为公共边=相同的srcId和相同的dstId,并且顶点和边是唯一的。

共有1个答案

郭云
2023-03-14

假设只有两个图,并且两个图都包含相同的顶点集,没有重复的边,您可以对一个新图使用组合边并使用groupedges方法:

val graph1: Graph[T,Double] = ???
val graph2: Graph[T,Double] = ???

Graph(graph1.vertices, graph1.edges.union(graph2.edges))
  .groupEdges((val1, val2) => (val1 + val2) / 2.0)

或者更普遍一点:

Graph(graph1.vertices, graph1.edges.union(graph2.edges))
  .mapEdges(e => (e.attr, 1.0))
  .groupEdges((val1, val2) => (val1._1 + val2._1, val1._2 + val2._2))
  .mapEdges(e => e.attr._1 / e.attr._2)

如果这还不够,您可以组合值并从头创建一个新的图:

def edgeToPair (e: Edge[Double]) = ((e.srcId, e.dstId), e.attr)
val pairs1 = graph1.edges.map(edgeToPair)
val pairs2 = graph2.edges.map(edgeToPair)

// Combine edges
val newEdges = pairs1.union(pairs2)
  .aggregateByKey((0.0, 0.0))(
    (acc, e) => (acc._1 + e, acc._2 + 1.0),
    (acc1, acc2) => (acc1._1 + acc2._1, acc1._2 + acc2._2)
  ).map{case ((srcId, dstId), (acc, count)) => Edge(srcId, dstId, acc / count)}

// Combine vertices assuming there are no conflicts
// like different labels
val newVertices = graph1.vertices.union(graph2.vertices).distinct

// Create new graph
val newGraph = Graph(newVertices, newEdges)
 类似资料:
  • 图是一种比线性表和树更复杂的数据结构,在图中,结点之间的关系是任意的,任意两个数据元素之间都可能相关。 图是一种 多对多 的数据结构。 Gravph(V, E) V - vertex:点 度 - 入度和出度 点与点之间:连通与否 E - edge: 边 有向边和无向(单线线) 权重(边长) 无向图(边没有方向) 有向图(边有方向) 图是由顶点和边组成的:(可以无边,但至少包含一个顶点) 一组顶点:

  • 我的程序有问题。例如,我有5个字段。这些字段的值为或<代码>错误字段可以删除。所以我想找到这些领域的所有可能组合。 我的想法是:例如,我有一个包含这些字段的XML 字段1,正确 字段2,正确 字段3,错误 字段4,错误 第五场,错 结果应该是: 8种组合。 表示删除,表示不删除。 我无法实现复制功能。所以我只有4个Xmls结果: 有人能帮我吗? 首先,我感谢你的第一次支持。 字段矩阵类看起来像:

  • 当前的GraphX仅仅支持一组简单的常用结构性操作。下面是基本的结构性操作列表。 class Graph[VD, ED] { def reverse: Graph[VD, ED] def subgraph(epred: EdgeTriplet[VD,ED] => Boolean, vpred: (VertexId, VD) => Boolean): Graph

  • 1.1 广度优先遍历 (BFS) 类似树的层次遍历,首先访问起始顶点v,然后选取与v邻接的全部顶点w1,w2,…wn,进行访问。再依次访问与w1,w2,…wn邻接的全部顶点。依次类推,直到所有顶点都被访问过为止。从顶点一层层向外拓展和遍历,实现是需要用到队列。 1.2 深度优先遍历(DFS) 首先访问出发节点v,将其标记为已访问过;然后选取与v邻接的未被访问的任意一个顶点w,并访问它;再选取与w邻

  • 主要内容:图存储结构基本常识,图存储结构的分类我们知道,数据之间的关系有 3 种,分别是 "一对一"、"一对多" 和 "多对多",前两种关系的数据可分别用 线性表和树结构存储,本节学习存储具有"多对多"逻辑关系数据的结构—— 图存储结构。 图 1 图存储结构示意图 图 1 所示为存储 V1、V2、V3、V4 的图结构,从图中可以清楚的看出数据之间具有的"多对多"关系。例如,V1 与 V4 和 V2 建立着联系,V4 与 V1 和 V3 建立着

  • 汇编语言是直面计算机的编程语言,因此理解计算机结构是掌握汇编语言的前提。当前流行的计算机基本采用的是冯·诺伊曼计算机体系结构(在某些特殊领域还有哈佛体系架构)。冯·诺依曼结构也称为普林斯顿结构,采用的是一种将程序指令和数据存储在一起的存储结构。冯·诺伊曼计算机中的指令和数据存储器其实指的是计算机中的内存,然后在配合CPU处理器就组成了一个最简单的计算机了。 汇编语言其实是一种非常简单的编程语言,因