simplify

Уменьшите мультиграфик до простого графика

Описание

пример

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),:) является ребром в H который представляет краевую i в G.

  • ecount(j) количество ребер в G которые соответствуют краевым j в H.

Примеры

свернуть все

Создайте взвешенный неориентированный мультиграфик с несколькими ребрами между узлом 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)

Figure contains an axes. The axes 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. The axes 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. The axes contains an object of type graphplot.

Упростите график при сохранении самоциклов с помощью '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

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

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

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

Используйте второй и третий выходы 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: [3x1 table]
    Nodes: [3x0 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.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. The axes 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. The axes 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. The axes 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 сохраняет только ребро с минимальным или максимальным весом. The Weight переменная должна существовать в G.Edges, если вы не используете 'PickVariable' Пара "имя-значение", чтобы базировать выбор на другой переменной.

Пример: simplify(G,'last')

Метод агрегации, заданный как 'sum' или 'mean'. Метод агрегирования предоставляет способ объединить несколько ребер в один край, когда существует более одного ребра между этими же двумя узлами.

По умолчанию, simplify суммирует или усредняет веса ребер в графике и отбрасывает все другие свойства ребра. Однако можно использовать 'AggregationVariables' Пара "имя-значение", чтобы указать, какие числовые переменные в G.Edges для сохранения и заполнения.

Пример: simplify(G,'sum')

Переключитесь, чтобы сохранить самоциклы:

  • 'omitselfloops' - Удалите все самоциклы из графика. Это значение по умолчанию.

  • 'keepselfloops' - Узлы с одними или несколькими самоциклами имеют один самоцикл в упрощенном графику.

Пример: simplify(G,'sum','keepselfloops')

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: 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 table as input и возвращает логический скаляр, такой как @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' опция.

Индексы ребра, возвращенные как вектор. The ребра in H который представляет краевую i в G задается H.Edges(eind(i),:). Если ребро i в G - это самоцикл, который был удален, затем eind(i) является 0.

Ребро, возвращенный как вектор. ecount(i) количество ребер в G которые соответствуют краевым i в H.

См. также

| |

Введенный в R2018a