2016-12-08 47 views
0

h5pyライブラリを使用して、PythonでHDF5形式のMATLABファイルを読み込もうとしています。このファイルは "Q_visSDF_accurate.mat"と呼ばれ、 "filename"と "sdf"という2つのキーがあります。 。「ファイル名がセル配列文字列を含む 『SDF』はフロートを含有する6001、49380]行列であり、Iは、次のコードを使用して、可変SDFを抽出するために何の問題もなかった。h5pyでHDF5形式のMATLABファイルを読み取る

import h5py 
data = h5py.File("Q_visSDF_accurate.mat", 'r') 
sdf = data.get("sdf")[:,:] 
sdf = sdf.astype(float) 

しかし、私は、ファイル名を読んカント変数iが試み:

filename = data.get("filename")[0] 

が、コードの戻り値:

array([<HDF5 object reference>, <HDF5 object reference>, 
    <HDF5 object reference>, ..., <HDF5 object reference>, 
    <HDF5 object reference>, <HDF5 object reference>], dtype=object) 

IがIデリファレンスファイル名の変数のcontaint hdf5storageパッケージを使用することWORように、解決策ではないことができますか? ksのみのPython 32ビットとmatlab変数のサブセットを読み取ることができます。オクターブで

+0

'hdf5storage'を使ってみましたか? hdf5ベースの.matファイルをより使いやすい形式に読み込むことができます。 – TheBlackCat

+0

私はそれに応じてオリジナルの投稿を編集しました。 – user1363251

+0

これを解決できましたか?私はまだあなたの正確な問題に立ち往生しています – raaj

答えて

0

私はh5pyipythonで、細胞とマトリックス

>> xmat = [1,2,3;4,5,6;7,8,9]; 
>> xcell = {1,2,3;4,5,6;7,8,9}; 
>> save -hdf5 testmat.h5 xmat xcell 

を持つファイルを作成し、私はこのファイルは、マトリックス・グループはtypevalueデータセットを持っている2グループ

In [283]: F = h5py.File('../testmat.h5','r') 
In [284]: list(F.keys()) 
Out[284]: ['xcell', 'xmat'] 

が含まれていることを見つけます:

In [285]: F['xmat'] 
Out[285]: <HDF5 group "/xmat" (2 members)> 
In [286]: list(F['xmat'].keys()) 
Out[286]: ['type', 'value'] 
In [287]: F['xmat']['type'] 
Out[287]: <HDF5 dataset "type": shape(), type "|S7"> 
In [288]: F['xmat']['value'] 
Out[288]: <HDF5 dataset "value": shape (3, 3), type "<f8"> 
In [289]: F['xmat']['value'][:] 
Out[289]: 
array([[ 1., 4., 7.], 
     [ 2., 5., 8.], 
     [ 3., 6., 9.]]) 

セルが同じtypevalueを有するが、valueが別の基である:

In [291]: F['xcell']['type'] 
Out[291]: <HDF5 dataset "type": shape(), type "|S5"> 
In [292]: F['xcell']['value'] 
Out[292]: <HDF5 group "/xcell/value" (10 members)> 

In [294]: list(F['xcell']['value'].keys()) 
Out[294]: ['_0', '_1', '_2', '_3', '_4', '_5', '_6', '_7', '_8', 'dims'] 
... 
In [296]: F['xcell']['value']['dims'][:] 
Out[296]: array([3, 3]) 

それは0D配列であるので、セルの値を取得するために[...]を使用していた:

In [301]: F['xcell']['value']['_0']['value'][...] 
Out[301]: array(1.0) 

実際に質問を複製するには、文字列セルの値を作成する必要がありますが、これは、データがデータグループ内の名前付きデータセットとしてどのように格納されるかを十分に示していると思います。

Octave h5ストレージがMATLABと互換性があると仮定しています。

関連する問題