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 консервы только ребро с минимальным или максимальным весом. 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 таблица, как введено и возвращает логический скаляр, такой как @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 ложь). Самоциклы также удалены, если вы не задаете 'keepselfloops' опция.

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

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

Смотрите также

| |

Введенный в R2018a