Renvoyer des variables de python à Matlab

Oct 08 2020

J'essaye de passer quelques variables de python à Matlab, mais je n'ai pas réussi. Si je ne passe qu'une seule variable, cela fonctionne bien, mais comme j'ai besoin de passer plus de variables avec différents types (matrice, vecteur, scalaire) ne fonctionne pas.

voici mon code en Python test_return.py:

import numpy as np
def run_test_return():
    a = np.ones((5,3))
    b = np.ones((10))
    c = 4
        
    return a, b, c 
# I don't know if I should return the variables as tuples,list, dictionary... to be easier to read in matlab

Et voici le script matlab à lire:

pyOut = py.importlib.import_module('test_return');

py.importlib.reload(pyOut);

[a,b,c] = py.test_return.run_test_return(); % This is the part that doesn't work, I don't know how to import more than one variable, if I import only one works fine...

a = double(py.array.array('d',py.numpy.nditer(a))); % I don't know if this is the best way to read numpy 2D array

b = double(py.array.array('d',py.numpy.nditer(a)));

c = double(py.array.array('d',py.numpy.nditer(a)));

Réponses

Paolo Oct 08 2020 at 14:59

Votre fonction renvoie un tuple:

>> p = py.file_return.run_test_return;
>> class(p)
py.tuple

et les éléments du tuple sont de types de données différents:

>> class(p{1})
py.numpy.ndarray

>> class(p{3})
py.int

dans MATLAB, vous pouvez simplement envelopper le tuple dans une cellule et l'itérer avec cellfun pour convertir chaque élément en un tableau de cellules de doubles:

>> c=cellfun(@double,cell(p),'UniformOutput',false);