Main Content

findedge

グラフ内のエッジを検出

説明

[sOut,tOut] = findedge(G) は、グラフ G のすべてのエッジについて、ソース ノード ID sOut とターゲット ノード ID tOut を返します。

[sOut,tOut] = findedge(G,idx) は、idx で指定されたエッジのソース ノードおよびターゲット ノードを検出します。

idxOut = findedge(G,s,t) は、ソースとターゲットのノード ペア s および t で指定されたエッジについて、エッジの数値インデックス idxOut を返します。エッジ インデックスは、グラフのテーブル G.Edges の行 G.Edges.Edge(idxOut,:) に対応します。st の間に複数のエッジがある場合、すべてのインデックスが返されます。0 のエッジ インデックスは、グラフに含まれないエッジを示します。

さらに、[idxOut,m] = findedge(G,s,t) は、idxOut 内の各エッジ インデックスに関連付けられているノード ペア (s,t) を示すベクトル m を返します。これは、同じ 2 つのノード間に複数のエッジがある場合に役に立ちます。

すべて折りたたむ

グラフを作成し、(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

グラフを作成し、エッジ インデックスが 3 および 7 のエッジについて終了ノードを求めます。

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 の間に 2 つのエッジがあります。

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) の間のエッジの重みを変更します。2 つの出力を findedge に指定して、終了ノード インデックス m を取得します。この出力は、2 つのノード間に複数のエッジがある場合に役に立ちます。idxOut の要素の数が、st のノード ペア数より多い場合があるためです。エッジ idxOut(1) = 3 はノード ペア (s(1),t(1)) = (3,2) を連結し、エッジ idxOut(2) = 4 とエッジ idxOut(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.

入力引数

すべて折りたたむ

入力グラフ。graph オブジェクトまたは digraph オブジェクトとして指定します。無向グラフの作成には graph を、有向グラフの作成には digraph を使用します。

例: G = graph(1,2)

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

ノード ペア。ノード インデックスまたはノード名の個別の引数として指定します。s および t に同じように配置された要素は、グラフ エッジのソース ノードおよびターゲット ノードを指定します。

次の表に、1 つ以上のノードを数値ノード インデックスまたはノード名のいずれかで参照するさまざまな方法を示します。

形式単一ノード複数ノード
ノード インデックス

スカラー

例: 1

ベクトル

例: [1 2 3]

ノード名

文字ベクトル

例: 'A'

文字ベクトルの cell 配列

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

string スカラー

例: "A"

string 配列

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

categorical 配列

例: categorical("A")

categorical 配列

例: 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。正の整数の個別のスカラーまたはベクトルとして返されます。同様に配置された sOut および tOut の要素は、エッジ G.Edges(idx,:) を構成するソース ノードおよびターゲット ノードを指定します。

拡張機能

スレッドベースの環境
MATLAB® の backgroundPool を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool を使用してコードを高速化します。

バージョン履歴

R2015b で導入