Mathematica - 反射/反转单向图边

时间:2018-02-17 22:52:00

标签: wolfram-mathematica

给出的是mathematica-11中的数据图。该图包括节点和独立节点(未连接)之间的无向边缘。

Graph[{1 <-> 2, 2<-> 3, 3<-> 1, 4<-> 5, 5<-> 6, 6<-> 2, 2<-> 4}, VertexLabels -> "Name", VertexShapeFunction -> "Diamond", VertexSize -> Small]

Graph with edges

问题

如何反映(反转)节点之间的边缘?

由于它们是单向的,通过反射/反转,我的意思是那些节点应该被连接在没有边缘的地方(前面的边缘消失了)。

Mathematica-11提供了 ReverseGraph 函数,但是这个函数只反映了方向的有向边。有任何想法吗?

将图形转换为AdjacencyMatrix并反转它。然后,反转矩阵可用于创建反射/反转图。 但是,我坚持反转AdjacencyMatrix,因为结果会出现奇怪的行为:

Inverted AdjacencyMatrix

使用Inverse (AdjacencyMatrix[data]) // MatrixForm

时,真正的值被替换为术语“反转”这么简单

相关

This article介绍了如何反映边缘权重,但不包括边缘本身。

1 个答案:

答案 0 :(得分:1)

我不确定我是否完全理解你的问题所以如果这不是答案,请告诉我们为什么不:

opts = {VertexLabels -> "Name", VertexShapeFunction -> "Diamond", VertexSize -> Small}

g1 = Graph[{1 <-> 2, 2 <-> 3, 3 <-> 1, 4 <-> 5, 5 <-> 6, 6 <-> 2, 2 <-> 4}];

然后你可能会喜欢

GraphComplement[g1, opts]

或者,如果您希望从每个节点到自身的边缘

AdjacencyGraph[Table[1, {VertexCount[g1]}, {VertexCount[g1]}] - AdjacencyMatrix[g1], opts]