2013-04-17 16 views
2

我想從.mat文件加載數據到python,以便我可以將它保存在HDF5文件中。如何在HDF5文件中保存Python dtype('object')?

問題是scipy.io.loadmat返回包含D型=陣列詞典[(「數」,「| O4」)])

每當我嘗試創建一個數據集的陣列中的一個回來,我得到的以下錯誤:

>> mat = scipy.io.loadmat('state-10.mat') 
>> h = h5py.File('test.hdf5','w') 
>> h.create_dataset('set', data=mat['ProteinComplex']) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib/python2.7/dist-packages/h5py/_hl/group.py", line 69, in create_dataset 
    dsid = dataset.make_new_dset(self, shape, dtype, data, **kwds) 
    File "/usr/lib/python2.7/dist-packages/h5py/_hl/dataset.py", line 88, in make_new_dset 
    tid = h5t.py_create(dtype, logical=1) 
    File "h5t.pyx", line 1332, in h5py.h5t.py_create (h5py/h5t.c:11600) 
    File "h5t.pyx", line 1373, in h5py.h5t.py_create (h5py/h5t.c:11209) 
    File "h5t.pyx", line 1311, in h5py.h5t._c_compound (h5py/h5t.c:10695) 
    File "h5t.pyx", line 1332, in h5py.h5t.py_create (h5py/h5t.c:11600) 
    File "h5t.pyx", line 1402, in h5py.h5t.py_create (h5py/h5t.c:11465) 
TypeError: Object dtype dtype('object') has no native HDF5 equivalent 

有沒有解決方法?

回答

5

原來mat['ProteinComplex']的類型是一個scipy多維數組(ndarray)。可以使用ndarray.tolist()方法將它們轉換爲列表。如果我們將nd數組更改爲列表,它將在使用H5Py創建數據集時起作用

>> mat = scipy.io.loadmat('state-10.mat') 
>> h = h5py.File('test.hdf5','w') 
>> protein_complex = mat['ProteinComplex'].tolist() 
>> h.create_dataset('ProteinComplex', data=protein_complex) 
相關問題