Main Content

simplify

다중 그래프를 단순 그래프(simple graph)로 만들기

설명

예제

H = simplify(G)는 다중 간선이나 자가 루프를 갖지 않는 그래프를 반환합니다. 동일한 두 노드 사이에 다중 간선이 있는 경우, 첫 번째 간선만(G.Edges에 정의된 대로) 유지됩니다. 간선 속성은 그대로 유지됩니다.

예제

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' 선택 방법과 함께 사용할 수 있습니다.

예제

[H,eind,ecount] = simplify(___)는 다음과 같은 간선 인덱스 eind와 간선 개수 ecount를 추가로 반환합니다.

  • H.Edges(eind(i),:)G의 간선 i를 나타내는 H의 간선입니다.

  • ecount(j)G의 간선 중에서 H의 간선 j에 대응하는 간선의 개수입니다.

예제

모두 축소

노드 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)

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

simplify(G) 명령은 반복되는 간선 중에서 첫 번째 간선을 유지합니다. 두 번째 입력값을 사용하면 다른 선택/결합 방법을 지정할 수 있습니다.

다중 간선 중 하나를 선택하는 옵션에는 'first'(디폴트 값), 'last', 'min', 'max'가 있습니다. 가중치가 가장 큰, 반복되는 간선을 유지합니다.

H_pick = simplify(G,'max');
plot(H_pick,'EdgeLabel',H_pick.Edges.Weight)

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

다중 간선을 하나로 결합하는 옵션에는 'sum''mean'이 있습니다. 반복되는 간선을 합산하여 가중치가 더 큰 하나의 간선을 생성합니다.

H_comb = simplify(G,'sum');
plot(H_comb,'EdgeLabel',H_comb.Edges.Weight)

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

'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

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

G = simplify(G,'keepselfloops');
plot(G)
axis equal

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

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: [3x1 table]
    Nodes: [3x0 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.Edges
ans=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

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

'min' 선택 메서드를 사용하고 'PickVariable'의 값을 'Time' 변수로 지정하여 각 노드 집합 사이에서 가장 빠른 이동 수단을 찾습니다.

t = simplify(G,'min','PickVariable','Time');
plot(t,'EdgeLabel',cellstr(t.Edges.Mode))

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

'sum' 집계 메서드를 사용하고 'AggregationVariables'의 값을 'Cost'로 지정하여 각 연결편에서 얼마만큼의 요금이 발생하는지 계산합니다.

c = simplify(G,'sum','AggregationVariables','Cost');
plot(c,'EdgeLabel',c.Edges.Cost)

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])

간선 선택 메서드로, '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에 개발됨

참고 항목

| |