Main Content

findedge

定位图中的边

说明

对于图 G 中的所有边,[sOut,tOut] = findedge(G) 返回的源和目标节点 ID sOuttOut

示例

[sOut,tOut] = findedge(G,idx) 查找 idx 指定的边的源和目标节点。

示例

对于源和目标节点对组 st 指定的边,idxOut = findedge(G,s,t) 返回数值边索引 idxOut。边索引对应于图的 G.Edges 表中的行 G.Edges.Edge(idxOut,:)。如果 st 之间存在多条边,则返回它们的所有索引。边索引 0 表示边不在图中。

示例

[idxOut,m] = findedge(G,s,t) 还返回向量 m,指示哪个节点对 (s,t)idxOut 中的每个边索引关联。这在相同两个节点之间存在多条边时很有用。

示例

全部折叠

创建一个图,然后确定 (1,2) 和 (3,5) 边的边索引。

s = [1 1 2 2 2 3 3 3];
t = [2 3 3 4 5 6 7 5];
G = graph(s,t)
G = 
  graph with properties:

    Edges: [8x1 table]
    Nodes: [7x0 table]

idxOut = findedge(G,[1 3],[2 5])
idxOut = 2×1

     1
     6

idxOut 包含每条指定边的 G.Edges.EndNodes 的行索引。

创建一个图,然后确定图中所有边的端节点。

s = {'a' 'a' 'b' 'b' 'c' 'c'};
t = {'b' 'c' 'd' 'e' 'f' 'g'};
G = graph(s,t);
G.Edges
ans=6×1 table
       EndNodes   
    ______________

    {'a'}    {'b'}
    {'a'}    {'c'}
    {'b'}    {'d'}
    {'b'}    {'e'}
    {'c'}    {'f'}
    {'c'}    {'g'}

[sOut,tOut] = findedge(G)
sOut = 6×1

     1
     1
     2
     2
     3
     3

tOut = 6×1

     2
     3
     4
     5
     6
     7

创建一个图,然后确定其索引是 37 的边的端节点。

s = [1 1 1 1 2 2 3 3 4 4];
t = [2 3 4 5 6 7 8 9 10 11];
G = digraph(s,t)
G = 
  digraph with properties:

    Edges: [10x1 table]
    Nodes: [11x0 table]

[sOut,tOut] = findedge(G,[3 7])
sOut = 2×1

     1
     3

tOut = 2×1

     4
     8

创建一个图。

s = [1 1 2 3];
t = [2 3 3 4];
weights = [10 20 30 40];
G = graph(s,t,weights)
G = 
  graph with properties:

    Edges: [4x2 table]
    Nodes: [4x0 table]

使用 findedge 检索索引来找出 (1,3) 边的权重。

G.Edges.Weight(findedge(G,1,3))
ans = 
20

使用 findedge 更改多重图中数条边的权重。

创建并绘制一个多重图。此图在节点 2 和节点 4 之间有两条边。

s = [1 1 2 3 2 2];
t = [2 3 3 4 4 4];
weights = [10 20 30 40 10 10];
G = graph(s,t,weights);
plot(G,'EdgeLabel',G.Edges.Weight)

Figure contains an axes object. The axes object contains an object of type graphplot.

更改节点 (3,2) 和 (2,4) 之间的边的权重。为 findedge 指定两个输出,以获取端节点索引 m。当两个节点之间存在多条边时,此输出非常有用,因为 idxOut 中的元素数量可能多于 st 中的节点对数量。边 idxOut(1) = 3 连接节点对 (s(1),t(1)) = (3,2),边 idxOut(2) = 4idxOut(3) = 5 连接节点对 (s(2),t(2)) = (2,4)

s = [3 2];
t = [2 4];
w = [1 4];
[idxOut, m] = findedge(G, s, t)
idxOut = 3×1

     3
     4
     5

m = 3×1

     1
     2
     2

G.Edges.Weight(idxOut) = w(m);
plot(G,'EdgeLabel',G.Edges.Weight)

Figure contains an axes object. The axes object contains an object of type graphplot.

输入参数

全部折叠

输入图,指定为 graphdigraph 对象。可使用 graph 创建一个无向图,或使用 digraph 创建一个有向图。

示例: G = graph(1,2)

示例: G = digraph([1 2],[2 3])

节点对组,指定为单独的节点索引或节点名称参量。st 中位置类似的元素指定图中边的源和目标节点。

下表显示通过数值节点索引或节点名称引用一个或多个节点的不同方法。

形式单一节点多个节点
节点索引

标量

示例:1

向量

示例:[1 2 3]

节点名称

字符向量

示例:'A'

字符向量元胞数组

示例:{'A' 'B' 'C'}

字符串标量

示例:"A"

字符串数组

示例:["A" "B" "C"]

分类数组

示例:categorical("A")

分类数组

示例:categorical(["A" "B" "C"])

示例: G = findedge(G,[1 2],[3 4])

示例: G = findedge(G,{'a' 'a'; 'b' 'c'},{'b' 'c'; 'c' 'e'})

边索引,指定为正整数组成的标量或向量。边索引对应于图 G.Edges(idx,:)G.Edges 表中的一个行。

输出参量

全部折叠

边索引,以非负整数组成的标量或向量形式返回。边索引对应于图 G.Edges(idxOut,:)G.Edges 表中的行。边索引 0 表示边不在图中。

idxOut 的长度对应于输入中的节点对的数量,除非输入图是多重图。

端节点索引,以向量形式返回。m 中的值将 idxOut 中的边索引连接到输入节点对 (s,t)。边 idxOut(j) 连接索引为 m(j) 的节点对。

节点 ID,以由正整数组成的单独标量或向量形式返回。同样,sOuttOut 中定位的元素指定构成边 G.Edges(idx,:) 的源和目标节点。

扩展功能

基于线程的环境
使用 MATLAB® backgroundPool 在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool 加快代码运行速度。

版本历史记录

在 R2015b 中推出