2016-05-13 7 views
2

私はHDF5データフォーマットを使用して約3000個の配列を保存しようとしています。データnumpyのの不規則な性質のためには、一般的なオブジェクトクラスを使用するためのアレイが5306から121999までの長さでnp.float64異なるサイズのh5pyアレイで保存する

を変える私が Object dtype dtype('O') has no native HDF5 equivalent エラーを取得しています。

私の考えは、すべての配列を121999の長さにして別のデータセットにサイズを格納することでした。

しかし、これはスペースが非常に非効率的なようですが、よりよい方法はありますか?

EDIT:明確にするために、私はdtype = np.float64の3126の配列を保存したいと思います。私はそれらをlistに格納しておき、h5pyがルーチンを実行するときには長さが異なるためdtype = objectの配列に変換されます。それを説明するには、次の

a = np.array([0.1,0.2,0.3],dtype=np.float64) 
b = np.array([0.1,0.2,0.3,0.4,0.5],dtype=np.float64) 
c = np.array([0.1,0.2],dtype=np.float64) 

arrs = np.array([a,b,c]) # This is performed inside the h5py call 
print(arrs.dtype) 
>>> object 
print(arrs[0].dtype) 
>>> float64 
+0

A 3000個のサブ配列(dtypeオブジェクト)を持つ1つの配列を保存しようとしていますか、またはそれぞれがdtype floatを持つ3000個の配列を保存しようとしていますか? 2つまたは3つの配列を持つ小さな例を挙げてください。 – hpaulj

+0

編集で –

+0

と明記しました。 'arrs'は' h5py'が保存できないオブジェクト配列です。 'a'、' b'、 'c'を別々の' datasets'として保存する必要があります。これらの配列は 'datagroup'の要素になり、グループとの辞書インターフェースを使うことができます。 – hpaulj

答えて

9

は、あなたが何かをしようとしたように見える:

In [364]: f=h5py.File('test.hdf5','w')  
In [365]: grp=f.create_group('alist') 

In [366]: grp.create_dataset('alist',data=[a,b,c]) 
... 
TypeError: Object dtype dtype('O') has no native HDF5 equivalent 

しかし、あなたはそれが動作する別のデータセットとして配列保存する代わりに、場合:

In [367]: adict=dict(a=a,b=b,c=c) 

In [368]: for k,v in adict.items(): 
    grp.create_dataset(k,data=v) 
    .....:  

In [369]: grp 
Out[369]: <HDF5 group "/alist" (3 members)> 

In [370]: grp['a'][:] 
Out[370]: array([ 0.1, 0.2, 0.3]) 

にしてアクセスするために、すべてのグループ内のデータセット:

In [389]: [i[:] for i in grp.values()] 
Out[389]: 
[array([ 0.1, 0.2, 0.3]), 
array([ 0.1, 0.2, 0.3, 0.4, 0.5]), 
array([ 0.1, 0.2])] 
+0

こんにちは、ここで 'k'と' v'について説明できますか? – Ling

+0

辞書 'items()'は 'key 'の' value'ペアのタプルを生成します。 – hpaulj

関連する問題