MATLAB Answers

sortrows graph edges .

28 views (last 30 days)
Rub Ron
Rub Ron on 6 Jun 2020
Commented: Rub Ron on 19 Jul 2020 at 23:28
I have a graphs G. The G.Edges has 300 elements. I would like to sort the edges of my graph based on a given index (of size 300x1). I tried:
G.Edges = sortrows(G.Edges,index);
but it gives me an error:
Error using tabular/sortrows (line 57)
Variable index exceeds table dimensions.
I also tried to sort it based in the weight of the edges, but it does not work either.
G.Edges = sortrows(G.Edges,'Weight','ascend');
Any help will be appreciatted.

  2 Comments

darova
darova on 15 Jun 2020
what does it mean?
Rub Ron
Rub Ron on 15 Jun 2020
@darova index is the new position sof the edges. Considering the inital position (as listed) of the edges were: [1 2 3 4 ... 300]

Sign in to comment.

Answers (2)

Christine Tobler
Christine Tobler on 15 Jun 2020
Edited: Christine Tobler on 15 Jun 2020
The variable G.Edges.EndNodes of a graph can't be modified, it is always sorted by the nodes in the graph. This is so that the presentation is standardized, meaning that two graphs that have the same nodes and edges will present as the same.
You can save the sorted edges table into another variable, though:
weightSortedEdges = sortrows(g.Edges, 'Weight')
if this index is captured as the weight of each edge, or based on the index variable:
[~, ind] = sort(index);
indexSortedEdges = g.Edges(ind, :);

  5 Comments

Show 2 older comments
Rub Ron
Rub Ron on 19 Jul 2020 at 21:02
@Steven Lord, thanks but your suggestion does not help either. In fact by creating a graph based on a table (even if adding new egdes as tables) the edges of the graph are reorder automatically to an undesired order. It can be seen in the example you referred "Add Edges with Attributes to Graph"
Steven Lord
Steven Lord on 19 Jul 2020 at 21:10
And if you have additional information associated with each edge, that additional information will be reordered along with the edge EndNodes.
Don't think of it as "edge 5 has AdditionalData = 42." Think of it as "the edge between nodes 6 and 7 has AdditionalData = 42."
Rub Ron
Rub Ron on 19 Jul 2020 at 23:28
@Steven Lord Thank you again for your suggestion. Initially both the graph and the table had the same order. The table's order was changed, that is why the graph order is desired to have the same oder as the table. Having all the information stored in the graph does not seem suitable in my case.

Sign in to comment.


Walter Roberson
Walter Roberson on 15 Jun 2020
The second parameter to sortrows() being applied to a table, must be either 'rownames' or indications of the variables to sort on. A numeric vector can be given, in which case the entries represent variable numbers -- which would be 1 to the width of the Edges table, not to the height of the Edges table.
If you want the edges table to be in a particular order, then
G.Edges = G.Edges(index,:);

  1 Comment

Rub Ron
Rub Ron on 19 Jul 2020 at 21:09
Hi, unfortunately in my case G is not a table, it is a graph. So, this does not work for me.

Sign in to comment.


Translated by