8

Pythonでhdf5matlab7.3ファイルを読み取るのに問題が発生しています。私はh5py2.0.1を使用しています。

ファイルに格納されているすべての行列を読み取ることはできますが、文字列のリストを読み取ることはできません。h5pyは、文字列をタイプ| 04の形状(1、894)のデータセットとして表示します。h5file[obj_ref]このデータセットには、構文を使用して逆参照しようとしたオブジェクト参照が含まれています。

これにより、のようなものが生成されますdataset "FFb": shape (4, 1) type "<u2"。私はそれを長さ4の文字の配列として解釈しました。これは文字列のASCII表現のようです。

文字列を取り出す簡単な方法はありますか?

matlabからpythonhdf5のサポートを提供するパッケージはありますか?

4

2 に答える 2

10

それはMATLABの文字列のセル配列だと思いますか?この出力は正常に見えます。データセットはオブジェクトの配列です(|O4はNumPyオブジェクトのデータ型です)。各オブジェクトは2バイト整数の配列です(<u2NumPyリトルエンディアンの符号なし2バイト整数データ型です)。h5pyには、データセットが文字列のセル配列であることを知る方法がありません。任意の16ビット整数のセル配列にすることもできます。

文字列を取り出す最も簡単な方法は、次のように、unichrを使用してイテレータを使用して文字を変換することです。

strlist = [u''.join(unichr(c) for c in h5file[obj_ref]) for obj_ref in dataset])

これは、データセット(for obj_ref in dataset)を反復処理して新しいリストを作成します。オブジェクト参照ごとに、オブジェクト(h5file[obj_ref])を逆参照して整数の配列を取得します。各整数を文字()に変換し、unichr(c)それらの文字をすべてUnicode文字列()に結合しますu''.join()

これにより、Unicode文字列のリストが生成されることに注意してください。すべての文字列にASCII文字のみが含まれていることが確実な場合は、で置き換えることができu''ます。''unichrchr

警告:私はh5pyを持っていません。この投稿は、MATLABとNumPyでの私の経験に基づいています。データセットに合わせて、構文または反復順序を調整する必要がある場合があります。

于 2012-08-21T05:01:47.730 に答える
3

GroupDatasetオブジェクトの元のMatlabクラス名は次の方法で取得できます。

dataset.attrs['MATLAB_class']

文字列が含まれている場合datasetは、を返しb'char'ます。

于 2017-09-20T03:36:08.187 に答える