La “conversion” des tableaux Numpy à Matlab et vice versa
Je suis à la recherche d'un moyen de passer des tableaux NumPy à Matlab.
J'ai réussi à le faire par le stockage de la matrice en une image à l'aide de scipy.misc.imsave
puis de le charger à l'aide de imread
, mais bien sûr, cela provoque la matrice contenir des valeurs entre 0 et 256 au lieu de les "vraies" valeurs.
De prendre le produit de cette matrice divisé par 256, et la valeur maximale dans l'original tableau NumPy me donne la bonne matrice, mais j'ai l'impression que c'est un peu fastidieux.
est-il un moyen plus simple?
- J'en oublie, n'Matlab permettent l'analyse des fichiers texte? Parce que vous pourriez juste le format des tableaux numpy que Matlab-ceux de style dans les chaînes, les écrire dans un fichier, et ensuite de lire les tableaux dans Matlab.
- Avez-vous envisager de mlabwrap mlabwrap.sourceforge.net/#description
- êtes-vous sûr que vous ne pouvez pas faire le calcul entièrement dans numpy/scipy? je me demandais
- Je suis assez sûr que je serais capable de convertir le Matlab mise en œuvre d'un PLSM algorithme de numpy, mais pour résoudre tous les problèmes causés par tout-en-un et de la différence dans les fonctions est très chronophage. Merci pour l'astuce @JAB, c'est moins fastidieux que de le convertir à une image d'abord. Cependant, je pourrais venir à travers de matrices 3D plus tard, Joe la solution fonctionne pour moi.
- que python-à-matlab pont a l'air prometteur! Check it out.
- MATLAB peut lire et écrire HDF5 format, et il y a les bibliothèques python. ..
- question connexe: mathworks.com/matlabcentral/answers/...
Vous devez vous connecter pour publier un commentaire.
Sûr, il suffit d'utiliser
scipy.io.savemat
Comme un exemple:
De même, il n'y a
scipy.io.loadmat
.Puis de charger ce dans matlab avec
load test
.Alteratively, comme @JAB suggéré, vous pouvez simplement enregistrer les choses dans un ascii fichier délimité par des tabulations (par exemple
numpy.savetxt
). Cependant, vous serez limité à 2 dimensions si vous aller dans cette voie. D'autre part, l'ascii est le universial format d'échange. À peu près tout va gérer un fichier texte délimité.load('test.mat')
?Une solution simple, sans transfert de données par fichier ou externe libs.
Numpy a une méthode pour transformer ndarrays de liste et matlab types de données peuvent être définis à partir de listes. Alors, quand peut transformer comme:
De matlab, python nécessite plus d'attention. Il n'existe pas de fonction intégrée pour convertir le type directement à des listes. Mais nous pouvons accéder aux données brutes, ce qui n'est pas en forme, mais simple. Ainsi, nous utilisons
reshape
(pour formater correctement) ettranspose
(à cause de la manière différente MATLAB et numpy stocker des données). Qui est vraiment important à souligner: le Tester dans votre projet, surtout si vous êtes en utilisant des matrices avec plus de 2 dimensions. Il travaille pour MATLAB 2015a et 2 s'estompe.mat_a = matlab.double(np_a.tolist())
peut être terriblement inefficace/lent. Aller avec Joe kingston portant réponse pour autre chose que les np de tableaux. Voir stackoverflow.com/a/45284125/2524427Il y a quelques temps, j'ai affronté le même problème et a écrit les scripts suivants pour permettre de facilement copier et coller des tableaux en arrière à partir de sessions interactives. N'est évidemment pratique pour de petits tableaux, mais j'ai trouvé ça plus pratique que de la sauvegarde/chargement par l'intermédiaire d'un fichier de tous les temps:
Matlab -> Python
Python -> Matlab
scipy.io.savemat ou scipy.io.loadmat ne fonctionne PAS pour matlab tableaux --v7.3. Mais la bonne nouvelle est que matlab --v7.3 fichiers sont hdf5 ensembles de données. Ils peuvent donc être lus à l'aide d'un certain nombre d'outils, y compris numpy.
Pour python, vous aurez besoin de la h5py extension, ce qui nécessite HDF5 sur votre système.
Ne sais pas si ça compte comme "simple", mais j'ai trouvé une solution pour déplacer des données d'un numpy arrray créé dans un script python qui est appelé par matlab très rapide:
dump_reader.py (source python):
dump_read.m (matlab script):
Il s'appuie sur le fait que matlabs double semble être de travailler efficacement sur les tableaux par rapport à des cellules ou des matrices. Deuxième astuce consiste à transmettre les données à matlabs double d'une manière efficace (par l'intermédiaire de pythons tableau natif.array).
P. S. désolé pour necroposting mais j'ai eu beaucoup de mal avec ses et ce sujet a été l'un des plus proches de hits. Peut-être que ça aide quelqu'un de raccourcir les temps de difficulté.
P. P. S. testé avec Matlab R2016b + python 3.5.4 (64bit)