simplify
将多重图简化为简单图
语法
说明
指定在多条边之间进行选择的方法。边属性会保留。H = simplify(G,pickmethod)pickmethod 可以是 'first'(默认值)、'last'、'min' 或 'max'。
指定的方法是将多条边的权重合并为一条新边的权重。H = simplify(G,aggregatemethod)G 中所有其他边属性均舍弃。aggregatemethod 可以是 'sum' 或 'mean'。
使用上述语法中的任何输入参量组合指定是保留还是删除图中的自环。例如,H = simplify(___,selfloopflag)'keepselfloops' 指定具有一个或多个自环的节点在简化图中将只有一个自环。
使用一个或多个名称-值对组参量指定其他选项。例如,您可以在 H = simplify(___,Name,Value)G.Edges 中指定 'PickVariable' 和一个变量,将该变量与 'min' 或 'max' 选择方法一起使用。
示例
创建一个加权的无向多重图,在节点 1 和节点 2 之间有多条边。
G = graph([1 1 1 1 2 3],[2 2 2 3 3 4], 1:6); G.Edges
ans=6×2 table
EndNodes Weight
________ ______
1 2 1
1 2 2
1 2 3
1 3 4
2 3 5
3 4 6
将多重图简化为简单图,使节点 1 和节点 2 之间只有一条边。simplify 保留这两个节点之间的第一条边 G.Edges(1,:) 并舍弃其他边。
G = simplify(G); G.Edges
ans=4×2 table
EndNodes Weight
________ ______
1 2 1
1 3 4
2 3 5
3 4 6
使用 simplify 的第二个输入选择一种方法:是从多条边之中进行选择,还是将多条边合并成一条边。
创建一个加权的多重图。在此图中,节点 3 和节点 4 之间出现五条边,但边的权重是随机的。查看边表并绘制该图作为参考。
G = graph([1 2 3 3 3 3 3 3 ],[2 3 1 4 4 4 4 4],randi(10,1,8)); G.Edges
ans=8×2 table
EndNodes Weight
________ ______
1 2 9
1 3 2
2 3 10
3 4 10
3 4 7
3 4 1
3 4 3
3 4 6
plot(G,'EdgeLabel',G.Edges.Weight)
命令 simplify(G) 保留重复边中的第一条边。但是,您可以使用第二个输入指定不同的选择/合并方法。
从多条边之中进行选择的选项包括:'first'(默认值)、'last'、'min' 和 'max'。保留权重最大的重复边。
H_pick = simplify(G,'max'); plot(H_pick,'EdgeLabel',H_pick.Edges.Weight)

将多条边合并成一条边的选项包括:'sum' 和 'mean'。将重复边相加生成一条权重较大的边。
H_comb = simplify(G,'sum'); plot(H_comb,'EdgeLabel',H_comb.Edges.Weight)

使用 'keepselfloops' 选项在简化图的同时保留自环。
创建一个具有两个节点和几个自环的多重图。简化图并保留自环。
G = graph([1 1 1 1 1 1 1 2 2 2 2],[1 1 1 1 2 2 2 2 2 2 2 ]);
plot(G)
axis equal
G = simplify(G,'keepselfloops'); plot(G) axis equal

使用 simplify 的第二个和第三个输出,获取有关合并了多少条边(以及哪些边)的信息。
创建一个具有三个节点和四条边的无向多重图。
G = graph([1 1 1 2],[2 2 3 3]); G.Edges
ans=4×1 table
EndNodes
________
1 2
1 2
1 3
2 3
简化图并指定三个输出,以获取有关合并边的更多信息。
[G,ei,ec] = simplify(G)
G =
graph with properties:
Edges: [3×1 table]
Nodes: [3×0 table]
ei = 4×1
1
1
2
3
ec = 3×1
2
1
1
ei(i) 是简化图中表示旧图中的边 i 的边。由于前两条边重复,因此 ei(1) = ei(2) = 1。而且 ec(1) = 2,因为新图中有两条边对应于旧图中的边 1。
说明如何使用 'PickVariable' 和 'AggregationVariables' 名称-值对组来简化多重图。
创建一个多重图,其中的节点表示位置,边表示运输方式。边的属性反映每一种运输方式的成本和时间。预览边表。
G = graph([1 1 1 1 1 1 2 2 2],[2 2 2 3 3 3 3 3 3],[],{'New York', 'Boston', 'Washington D.C.'});
G.Edges.Mode = categorical([1 2 3 1 2 3 1 2 3],[1 2 3],{'Air' 'Train' 'Bus'})';
G.Edges.Cost = [400 80 40 250 100 75 325 150 100]';
G.Edges.Time = [1 7 5 1.5 10 8 1.75 11 9]';
G.Edgesans=9×4 table
EndNodes Mode Cost Time
___________________________________ _____ ____ ____
{'New York'} {'Boston' } Air 400 1
{'New York'} {'Boston' } Train 80 7
{'New York'} {'Boston' } Bus 40 5
{'New York'} {'Washington D.C.'} Air 250 1.5
{'New York'} {'Washington D.C.'} Train 100 10
{'New York'} {'Washington D.C.'} Bus 75 8
{'Boston' } {'Washington D.C.'} Air 325 1.75
{'Boston' } {'Washington D.C.'} Train 150 11
{'Boston' } {'Washington D.C.'} Bus 100 9
绘制图作为参考。在每条边上标记运输模式,使边的线宽与时间成正比,并使每条边的颜色与成本成正比。
plot(G,'EdgeLabel',cellstr(G.Edges.Mode),'LineWidth',G.Edges.Time./min(G.Edges.Time),'EdgeCData',G.Edges.Cost) colorbar

使用 'min' 选择方法并将 'PickVariable' 的值指定为 'Time' 变量,以找出每组节点之间最快的运输方式。
t = simplify(G,'min','PickVariable','Time'); plot(t,'EdgeLabel',cellstr(t.Edges.Mode))

使用 'sum' 聚合方法并将 'AggregationVariables' 的值指定为 'Cost',以计算每一种连接方式赚取的钱数。
c = simplify(G,'sum','AggregationVariables','Cost'); plot(c,'EdgeLabel',c.Edges.Cost)

输入参数
边选择方法,指定为 'first'、'last'、'min' 或 'max'。当相同的两个节点之间存在多条边时,边选择方法可以选择要保留其中的哪条边。
如果方法是
'first'或'last',则simplify只保留边表G.Edges中出现的第一条边或最后一条边。如果方法是
'min'或'max',则simplify只保留具有最小权重或最大权重的边。Weight变量必须存在于G.Edges中,除非您使用'PickVariable'名称-值对组基于不同的变量进行选择。
示例: simplify(G,'last')
聚合方法,指定为 'sum' 或 'mean'。当相同的两个节点之间存在多条边时,聚合方法可将多条边合并成一条边。
默认情况下,simplify 仅对图中的边权重进行求和或求平均值,而舍弃所有其他边属性。但是,您可以使用 'AggregationVariables' 名称-值对组来指定要保留和聚合 G.Edges 中的哪些数值变量。
示例: simplify(G,'sum')
是否保留自环,指定为下列值之一:
'omitselfloops'- 删除图中的所有自环。这是默认设置。'keepselfloops'- 具有一个或多个自环的节点在简化图中只有一个自环。
示例: simplify(G,'sum','keepselfloops')
名称-值参数
以 Name1=Value1,...,NameN=ValueN 的形式指定可选参量对组,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但对各个参量对组的顺序没有要求。
在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name 引起来。
示例: H = simplify(G,'sum','AggregationVariables',{'Var1' 'Var2'})
边选择所基于的变量,以逗号分隔的对组形式指定,该对组由 'PickVariable' 和一个变量名称或数值索引组成。使用此名称-值对组选择 G.Edges 中除 'Weight' 之外的边变量,以便与 'min' 或 'max' 选择方法一起使用。当相同的两个节点之间存在多条边时,simplify 只保留具有所选变量的最小值或最大值的边。
示例: simplify(G,'min','PickVariable',3)
示例: simplify(G,'min','PickVariable','var3')
数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | char | string
要聚合的变量,以逗号分隔的对组形式指定,该对组由 'AggregationVariables' 和一个变量名称、变量名称元胞数组、字符串数组、数值向量、逻辑向量或函数句柄组成。使用此名称-值对组从 G.Edges 中选择一个或多个可与 'sum' 或 'mean' 聚合方法一起使用的边变量。当相同的两个节点之间存在多条边时,simplify 会将这些变量的值合并成一个值,作为一条新边的值。'AggregationVariables' 的值可以是下列值之一:
指定单个表变量名称的字符向量
字符向量元胞数组,其中每个元素表示一个表变量名称
指定一个或多个变量名称的字符串数组
表变量索引的向量
逻辑向量,每个元素分别对应一个表变量,其中
true表示包含对应的变量,false表示不包含对应的变量函数句柄,以
G.Edges表为输入并返回逻辑标量,如@isnumeric
示例: simplify(G,'sum','AggregationVariables',[4 5 6])
示例: simplify(G,'mean','AggregationVariables',{'var5 var7'})
示例: simplify(G,'mean','AggregationVariables',@isnumeric)
数据类型: single | double | logical | function_handle | char | string | cell
输出参量
简化图,以 graph 或 digraph 对象形式返回。H 不包含相同两个节点之间的任何重复边,例如 ismultigraph(H) 返回逻辑值 0 (false)。自环也被删除,除非您指定 'keepselfloops' 选项。
边索引,以向量形式返回。H 中表示 G 中的边 i 的边由 H.Edges(eind(i),:) 指定。如果 G 中的边 i 是被删除的自环,则 eind(i) 为 0。
边数,以向量形式返回。ecount(i) 是 G 中对应于 H 中的边 i 的边的条数。
扩展功能
基于线程的环境
使用 MATLAB® backgroundPool 在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool 加快代码运行速度。
版本历史记录
在 R2018a 中推出
另请参阅
graph | digraph | ismultigraph
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)