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)

Команда 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: [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

Используйте '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)

Входные параметры

свернуть все

Введите график, заданный как любой 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

Для просмотра документации необходимо авторизоваться на сайте