open loadmat leer from archivo python scipy mat-file

loadmat - Guardar y cargar el dict de Python con savemat produce un error



open matlab mat file in python (2)

Parece que está operando bajo la suposición de que scipy.io.savemat está destinado a ser capaz de guardar un diccionario estándar. No creo que ese sea el caso. El argumento de diccionario contiene los nombres de matrices numpy que se escriben en el archivo Matlab. Entonces puedes hacer algo como esto

import scipy.io as io import numpy as np y1=np.array([1,2,3,4]) y2=np.array([10,20,30,40]) y3=np.array([100,200,300,400]) a={} a[''test1'']=y1 a[''test2'']=y2 a[''test3'']=y3 io.savemat(''temp'',a) b = io.loadmat(''temp'') print b[''test1''] print b[''test2''] print b[''test3'']

lo que da:

[[1] [2] [3] [4]] [[10] [20] [30] [40]] [[100] [200] [300] [400]]

Aquí hay un ejemplo mínimo del error que recibo. Si entendí la documentación correctamente, esto debería estar funcionando, pero parece que no lo hice.

a={} a[''test1'']=1 a[''test2'']=2 a[''test3'']=3 import scipy.io as io io.savemat(''temp'',{''a'':a}) b = io.loadmat(''temp'') b[''a''].keys() Traceback (most recent call last): File "<input>", line 1, in <module> AttributeError: ''numpy.ndarray'' object has no attribute ''keys''


Parece que loadmat devuelve recarray en lugar de dict. Lo comprobé con Scipy 0.9.0. Equivalente de b[''a''].keys() será b[''a''].dtype.names .

Ejemplos:

In [12]: b[''a''].shape Out[13]: (1, 1) In [14]: b[''a''].dtype.names Out[16]: (''test1'', ''test3'', ''test2'') In [17]: b[''a''][''test1''] Out[17]: array([[[[1]]]], dtype=object)