Exportation de données au format Matlab
Importer des données à partir du format Matlab
Lister les variables d’un fichier .mat
Bienvenue dans un nouveau tutoriel Python ! Nous sommes de retour avec une nouvelle notion. Aujourd’hui nous allons voir comment manipuler des tableaux matlab avec Scipy. Ce cours sera très intéressant et riche en informations. Il suffit de bien suivre et d’appliquer les différents exemples et exercices fournis.
À la fin de ce tutoriel, vous serez capable de manipuler un fichier matlab en utilisant la librairie Scipy et cela soit en enregistrant des données sous l’extension .mat ou bien ouvrir un fichier .mat dans Jupyter, finalement vous allez aussi apprendre à lister les variables d’un fichier matlab.
Ce cours est plein d’exemple et d’exercices afin de vous permettre de bien manipuler ces fonctionnalités ! Toutes les raisons sont bonnes pour commencer ce cours ! Allons-y.
Scipy.io (input et output) est un sous-module de Scipy pour lire des données et écrire des données vers une variété de formats de fichiers (.mat , idl ,fichiers Fortran ,Matrix Market file, fichier arrf ). Dans ce tutoriel, nous allons nous intéresser à la manipulation des fichiers .mat de MATLAB.
Nous allons voir comment exporter des données au format MATLAB, importer des données d’un fichier MATLAB puis comment énumérer les variables dans un fichier MATLAB.
Dans cette première partie du tutoriel, nous allons voir comment exporter des données au format Matlab en utilisant la fonction savemat().
Cette fonction permet d’enregistrer un dictionnaire de mots et de tableaux donnés dans un fichier .mat de style MATLAB.
scipy.io.savemat(file_name, mdict, appendmat=True, format='5', long_field_names=False, do_compression=False, oned_as='row')
Les paramètres de la fonction sont :
Exemple :
Voici un exemple où on crée une liste de 20 chiffres puis on sauvegarde le fichier sous .mat .
Syntaxe :
from scipy.io import savemat
import numpy as np
liste = np.arange(20)
mat_dic = {"liste": liste, "label": "echantillon"}
mat_dic
{'liste': np.array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19]),
'label': 'echantillon'}
savemat("fichier_matlab.mat", mat_dic)
Résultat de l’exécution :
Pour vérifier le résultat de l’exécution, il suffit de vous placer dans le dossier où vous écrivez votre code et vous obtiendrez un nouveau fichier .mat dans votre dossier.
Exemple :
Nous allons Exporter le tableau suivant sous le nom de variable "var" dans un fichier mat :
Syntaxe :
from scipy import io
import numpy as np
tab = np.arange(10)
io.savemat('tab.mat', {"var": tab})
Résultat de l’exécution :
Exemple :
Syntaxe :
import scipy.io as io
import numpy as np
fruit_1=np.array(['Pomme'])
fruit_2=np.array(['Poire'])
dic={}
dic['fruit_1']=fruit_1
dic['fruit_2']=fruit_2
io.savemat('fruits',dic)
Résultat de l’exécution :
Dans la section suivante, nous allons voir comment importer des fichiers .mat !
La fonction loadmat() nous permet d’importer des données depuis un fichier Matlab.
scipy.io.loadmat(file_name, mdict=None, appendmat=True, **kwargs)
Les paramètres de la function loadmat() sont les suivants :
Exemple :
Dans cet exemple, nous allons créer un vecteur de nombres, l’enregistrer sous un fichier matlab ensuite l’importer grâce à la fonction loadmat() du sous module io .
Syntaxe :
from scipy import io
import numpy as np
tab1 = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9,])
# Export:
io.savemat('tab1.mat', {"vecteur": tab1})
# Import:
nv_fichier = io.loadmat('tab1.mat')
print (nv_fichier)
Résultat de l’exécution :
Utilisez le nom de variable "vecteur" pour afficher uniquement le tableau à partir des données matlab :
Print (nv_fichier ['vecteur'] )
Nous pouvons voir que le tableau était à l’origine 1D, mais lors de l’extraction, il a augmenté d’une dimension.
Pour résoudre ce problème, nous pouvons passer un argument supplémentaire squeeze_me=True :
# Import:
nv_fichier = io.loadmat('tab1.mat', squeeze_me=True)
print(nv_fichier['vecteur'])
Exemple :
Voici un autre exemple où nous utiliserons quelques fonctionnalités de plus.
Syntaxe :
On commence tout d’abord par importer notre fichier :
import scipy.io as sio
data= sio.loadmat('tab1.mat')
Ensuite, on utilise keys() pour avoir un dictionnaire qui retourne une paire clé/valeur pour chaque variable :
data.keys()
Résultat de l’exécution :
Dans la prochaine section, nous allons voir comment lister les variables d’un fichier .mat .
Cette fonction permet de lister les variables d’un fichier matlab.
scipy.io.whosmat(file_name, appendmat=True, **kwargs)
Les paramètres de cette fonction sont :
Exemple :
Dans ce premier exemple, nous allons importer un fichier matlab qui existe déjà et lister les différentes variables de ce fichier.
Syntaxe :
import scipy.io as sio
contenu_fichier_mat = sio.whosmat('tab1.mat')
print (contenu_fichier_mat)
Résultat de l’exécution :
Exemple :
Dans ce deuxième exemple, nous allons créer et sauvegarder un fichier matlab. Ensuite, nous allons
L’ouvrir et lister les différentes variables.
Syntaxe :
import scipy.io as sio
import numpy as np
#Sauvegarder un fichier matlab
vecteur = np.arange(5)
sio.savemat('tableau.mat',{'vecteur':vecteur})
#Importer le fichier
donnees = sio.loadmat('tableau.mat')
print (donnees)
#Lister les variables
contenu_fichier_mat = sio.whosmat('tableau.mat')
print (contenu_fichier_mat)
Résultat de l’exécution :
Maintenant nous allons passer à des exercices afin de mieux appliquer les fonctions apprises dans ce tutoriel .
Enoncé :
Dans cet exercice, on veut créer un dictionnaire puis le sauvegarder sous .mat pour l’ouvrir par la suite.
Le dictionnaire a 5 pairs clé/valeur :
valeur1 : [ 1,2,3,4]
valeur2 : [10,20,30,40 ]
valeur3 : [100,200,300,400 ]
valeur4 : [1000,2000,3000,4000]
valeur5 : [ 10000,20000,30000,40000]
À vous de jouer !
Correction :
import scipy.io as io
import numpy as np
x1=np.array([1,2,3,4])
x2=np.array([10,20,30,40])
x3=np.array([100,200,300,400])
x4=np.array([1000,2000,3000,4000])
x5=np.array([10000,20000,30000,40000])
dic={}
dic ['valeur1']=x1
dic ['valeur2']=x2
dic ['valeur3']=x3
dic ['valeur4']=x4
dic ['valeur5']=x5
io.savemat ('temp',dic)
b = io.loadmat('temp')
print (b['valeur1'])
print (b['valeur2'])
print (b['valeur3'])
print (b['valeur4'])
print (b['valeur5'])
Enoncé :
Similaire à l’exercice précèdent , mais cette fois-ci vous devez créer un dictionnaire des utilisateurs suivants :
utilisateur_1= (['John', 20, 3900,'Present'])
utilisateur_2= (['Albert', 45, 6700,'Present'])
utilisateur_3= (['Ken', 33, 3000,'Present'])
utilisateur_4= (['Leticia', 55, 3000,'Absent'])
utilisateur_5= (['Kate', 18, 3008,'Present'])
Correction :
import scipy.io as io
import numpy as np
utilisateur_1=np.array(['John', 20, 3900,'Present'])
utilisateur_2=np.array(['Albert', 45,6700,'Present'])
utilisateur_3=np.array(['Ken', 33,3000,'Present'])
utilisateur_4=np.array (['Leticia', 55, 3000,'Absent'])
utilisateur_5=np.array (['Kate', 18, 3008,'Present'])
dic= {}
dic ['utilisateur_1']= utilisateur_1
dic ['utilisateur_2']= utilisateur_2
dic ['utilisateur_3']= utilisateur_3
dic ['utilisateur_4']= utilisateur_4
dic ['utilisateur_5']= utilisateur_5
io.savemat('temp',dic)
b = io.loadmat('temp')
print(b['utilisateur_1'])
print (b['utilisateur_2'])
print (b['utilisateur_3'])
print (b['utilisateur_4'])
print (b['utilisateur_5'])
Enoncé :
Dans ce dernier exemple, on veut créer un dictionnaire de deux variables. var1 qui contient une valeur entière entre 10 et 3 et var2 qui contient une matrice de zéros de taille 2x3.
Correction :
import numpy as np, scipy.io
>>> data_1 = {"var1": np.random.random((10,3)), "var2": np.zeros((1,2,3), dtype=int)}
>>> scipy.io.savemat("data_1.mat", data_1)
>>> scipy.io.whosmat("data_1.mat")
Résultat de l’exécution :
Nous sommes arrivés à la fin de ce tutoriel, nous estimons que maintenant la manipulation de fichiers matlab en python est devenue claire pour vous. Maintenant vous êtes capable de transformer des données et les enregistrer sous un format .mat et inversement.
Nous vous conseillons de refaire les exemples et exercices de ce tutoriel puis d’essayer de coder votre propre exemple afin de bien maitriser les fonctionnalités présentées dans ce cours.
Le module est Scipy est très riche et ce n’est qu’une petite dégustation de ce que ce dernier offre. Nous vous invitons donc vivement à découvrir les autres tutoriels !
Vous êtes sur la bonne route, continuez ainsi . Bon courage et à prochain tutoriel chers lecteurs.