Ask Your Question
1

Generating a graph from .mat file

asked 2018-07-20 05:56:52 +0200

ASH gravatar image

The .mat file contains the adjacency matrix of a graph. How can I generate the underlying graph of this matrix in Jupyter?

edit retag flag offensive close merge delete

Comments

What is the format of the .mat file ? It it a text file ? Could you please provide a concrete example ?

tmonteil gravatar imagetmonteil ( 2018-07-20 09:50:15 +0200 )edit

The documentation for "mat-files" would seem to be:

slelievre gravatar imageslelievre ( 2018-07-25 04:07:59 +0200 )edit

1 Answer

Sort by ยป oldest newest most voted
2

answered 2018-07-20 10:53:30 +0200

tmonteil gravatar image

updated 2018-07-20 10:59:59 +0200

I had a look on the web, and it seems that you are speaking about .mat matrices provided by matlab. So, scipy, which is shipped with Sage already has a tool to read .mat files:

sage: from scipy.io import loadmat
sage: M = loadmat('<path_to_your_file.mat>')

As you can see, the object M is a dictionary:

sage: M

What is of interest for us is the a field:

sage: M['a']
array([[[  1.,   4.,   7.,  10.],
        [  2.,   5.,   8.,  11.],
        [  3.,   6.,   9.,  12.]]])

Which is an aray with a single entry that is the array we want:

sage: M['a'][0]
array([[  1.,   4.,   7.,  10.],
       [  2.,   5.,   8.,  11.],
       [  3.,   6.,   9.,  12.]])

This can then be transformed into a Sage matrix:

sage: m = matrix(RDF,M['a'][0])
sage: m
[ 1.0  4.0  7.0 10.0]
[ 2.0  5.0  8.0 11.0]
[ 3.0  6.0  9.0 12.0]
sage: m.parent()
Full MatrixSpace of 3 by 4 dense matrices over Real Double Field

If your matrix is the adjacency matrix of a graph, it should be square and symmetric, in which case you can recover the graph with:

sage: G = Graph(m)
edit flag offensive delete link more

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower

Stats

Asked: 2018-07-20 05:56:52 +0200

Seen: 390 times

Last updated: Jul 20 '18