Main Content

reordernodes

グラフ ノードの並べ替え

説明

H = reordernodes(G,order) は、order に従ってグラフ G のノードを並べ替えます。この並べ替えは、G の隣接行列の対称置換に対応します。

[H,idx] = reordernodes(G,order) は、エッジ インデックス idx の置換ベクトルも返します。たとえば、G.Edges に変数 Weight がある場合、H.Edges.Weight == G.Edges.Weight(idx) です。

すべて折りたたむ

グラフを作成してプロットします。

s = [1 1 1 2 5 3 6 4 7 8 8 8];
t = [2 3 4 5 3 6 4 7 2 6 7 5];
G = graph(s,t);
plot(G)

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

置換ベクトルを使用して、グラフ ノードを並べ替えます。

order = [7 2 3 4 8 1 5 6];
G = reordernodes(G,order);
plot(G)

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

重み付きグラフを作成し、プロットします。

s = [1 1 1 2 2 2 2 3 4];
t = [3 4 2 3 4 5 6 5 6];
weights = [6 7 6 3 2 8 7 1 1]; 
G = digraph(s,t,weights);
plot(G,'EdgeLabel',G.Edges.Weight)

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

ノード 1 が最大の出次数をもつように、出次数に基づいてグラフ ノードを並べ替えます。

[~,order] = sort(outdegree(G),'descend')
order = 6×1

     2
     1
     3
     4
     5
     6

[H,idx] = reordernodes(G,order);
plot(H,'EdgeLabel',H.Edges.Weight)

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

idx は、G.Edges の行の置換を表します。変数 Weight を使用してこの対応を確認します。

isequal(H.Edges.Weight, G.Edges.Weight(idx))
ans = logical
   1

入力引数

すべて折りたたむ

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

例: G = graph(1,2)

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

ノードの順序。ノード インデックスまたはノード名として指定します。orderG の隣接行列の対称置換を指定します。A = adjacency(G) の場合、A(order,order)adjacency(H) を生成します。

order は次のいずれかです。

  • ノード インデックスの数値ベクトル ([1 3 2] など)。

  • ノード名の文字ベクトルの cell 配列または string 配列 ({'A' 'C' 'B'}["A" "C" "B"] など)。

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

出力引数

すべて折りたたむ

出力グラフ。graph オブジェクトまたは digraph オブジェクトとして返されます。HNodesEdges のプロパティは G と同じですが、H.NodesH.Edges の行が置換されています。

  • H.Nodes は、G.Nodes(order,:) と同じです。

  • H.EdgesG.Edges(idx,:) に似ていますが、ノードが並べ替えられている点が異なります。

エッジ インデックスの置換ベクトル。ベクトルとして返されます。idx の値は、G.Edges の行の置換を表します。

拡張機能

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

バージョン履歴

R2015b で導入