如何在python访问时保留MATLAB结构?(How to preserve matlab str

2019-07-30 23:16发布

我有一个垫子文件,我使用访问

from scipy import io
mat = io.loadmat('example.mat')

从MATLAB,example.mat包含以下结构

    >> load example.mat
    >> data1

    data1 =

            LAT: [53x1 double]
            LON: [53x1 double]
            TIME: [53x1 double]
            units: {3x1 cell}


    >> data2

    data2 = 

            LAT: [100x1 double]
            LON: [100x1 double]
            TIME: [100x1 double]
            units: {3x1 cell}

在MATLAB中,我可以访问数据一样简单data2.LON等。这不是在蟒蛇微不足道。 它给我几个选项虽然喜欢

mat.clear       mat.get         mat.iteritems   mat.keys        mat.setdefault  mat.viewitems   
mat.copy        mat.has_key     mat.iterkeys    mat.pop         mat.update      mat.viewkeys    
mat.fromkeys    mat.items       mat.itervalues  mat.popitem     mat.values      mat.viewvalues    

是有可能保存在python相同的结构? 如果不是,如何更好地访问数据? 我使用本Python代码是非常困难的工作。

谢谢

Answer 1:

发现本教程的MATLAB结构和python

http://docs.scipy.org/doc/scipy/reference/tutorial/io.html



Answer 2:

当我需要将数据加载到Python从MATLAB存储在结构的数组{strut_1,struct_2}我提取我与加载对象的键和值的列表scipy.io.loadmat 。 那么我可以装配到这些有自己的变量,或者如果需要的话,他们重新打包为一个字典。 使用的exec命令可能不适合所有的情况,但如果你只是想处理数据它工作得很好。

# Load the data into Python     
D= sio.loadmat('data.mat')

# build a list of keys and values for each entry in the structure
vals = D['results'][0,0] #<-- set the array you want to access. 
keys = D['results'][0,0].dtype.descr

# Assemble the keys and values into variables with the same name as that used in MATLAB
for i in range(len(keys)):
    key = keys[i][0]
    val = np.squeeze(vals[key][0][0])  # squeeze is used to covert matlat (1,n) arrays into numpy (1,) arrays. 
    exec(key + '=val')


Answer 3:

(!)在保存在嵌套结构的情况下, *.mat文件,就要检查是否在字典中的项io.loadmat输出Matlab的结构。 例如,如果在Matlab

>> thisStruct

ans =
      var1: [1x1 struct]
      var2: 3.5

>> thisStruct.var1

ans =
      subvar1: [1x100 double]
      subvar2: [32x233 double]

然后,通过在mergen使用代码scipy.io.loadmat嵌套结构(即字典)



文章来源: How to preserve matlab struct when accessing in python?