simplify
다중 그래프를 단순 그래프(simple graph)로 만들기
구문
설명
는 다중 간선 중에서 하나를 선택하는 방법을 지정합니다. 간선 속성은 그대로 유지됩니다. 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)'PickVariable'과 G.Edges의 변수 하나를 지정하여 해당 변수를 '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 사이에 5개의 간선이 있습니다. 각 간선은 임의의 가중치를 갖습니다. 간선 테이블을 보고 참조를 위해 그래프를 플로팅합니다.
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' 옵션을 사용하여 자가 루프를 유지한 상태로 그래프를 간소화합니다.
2개의 노드와 여러 개의 자가 루프가 있는 다중 그래프를 생성합니다. 자가 루프를 유지한 상태로 그래프를 간소화합니다.
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의 두 번째와 세 번째 입력값을 사용하여 몇 개의 간선이 결합되었고 결합된 간선이 무엇인지에 관한 정보를 얻습니다.
3개의 노드와 4개의 간선이 있는 무방향 다중 그래프를 만듭니다.
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
결합된 간선에 관한 추가적인 정보를 얻기 위해 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를 나타내는 간소화된 그래프의 간선입니다. 처음 2개의 간선이 반복되므로 ei(1) = ei(2) = 1이 됩니다. 또한, 새 그래프에는 기존 그래프에서 간선 1에 대응하는 간선이 2개 있으므로 ec(1) = 2가 됩니다.
'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가 가중치가 가장 작은 간선 또는 가장 큰 간선만을 유지합니다.'PickVariable'이름-값 쌍을 사용하여 다른 변수를 기준으로 간선을 선택하지 않는 이상G.Edges에 반드시Weight변수가 있어야 합니다.
예: 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'과 함께 변수 이름 또는 숫자형 인덱스가 쉼표로 구분되어 지정됩니다. 'min' 또는 'max' 선택 방법과 함께 사용할 'Weight'가 아닌 다른 간선 변수를 G.Edges에서 선택하려면 이 이름-값 쌍을 사용합니다. simplify는 동일한 두 노드 사이에 여러 개의 간선이 있는 경우 선택한 변수의 최솟값 또는 최댓값을 갖는 간선만 유지합니다.
예: simplify(G,'min','PickVariable',3)
예: simplify(G,'min','PickVariable','var3')
데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | char | string
집계할 변수로, 'AggregationVariables'와 변수 이름, 변수 이름으로 구성된 셀형 배열, string형 배열, 숫자형 벡터, 논리형 벡터 또는 함수 핸들이 쉼표로 구분되어 지정됩니다. 'sum' 또는 'mean' 집계 방법과 결합할 하나 이상의 간선 변수를 G.Edges에서 선택하려면 이 이름-값 쌍을 사용합니다. simplify는 동일한 두 노드 사이에 여러 개의 간선이 있는 경우 이러한 변수의 값을 하나의 간선에 대한 하나의 값으로 결합합니다. 'AggregationVariables'의 값은 다음 중 하나일 수 있습니다.
단일 테이블 변수 이름을 지정하는 문자형 벡터
각 요소가 테이블 변수 이름인, 문자형 벡터로 구성된 셀형 배열
하나 이상의 변수 이름을 지정하는 string형 배열
테이블 변수 인덱스로 구성된 벡터
각각의 요소가 테이블 변수에 대응하는 논리형 벡터. 여기서
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.Edges(eind(i),:)는 G의 간선 i를 나타내는 H의 간선을 반환합니다. G의 간선 i가 제거된 자가 루프인 경우, eind(i)는 0이 됩니다.
간선 개수로, 벡터로 반환됩니다. ecount(i)는 H의 간선 i에 대응하는 G의 간선의 개수입니다.
확장 기능
스레드 기반 환경
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)