を私がコメントで書いたように、h5py
は配列ではなく、リストを保存します。あなたの呼び出しで、あなたのリストを配列に変換しようとします:
In [645]: alist
Out[645]:
[(1, array([[ 1., 1., 1., 1.]]), 64, 64),
(2, array([[ 1., 1., 1., 1.]]), 64, 64),
(3, array([[ 1., 1., 1., 1.]]), 64, 64),
(4, array([[ 1., 1., 1., 1.]]), 64, 64)]
In [646]: np.array(alist)
...
ValueError: setting an array element with a sequence.
このステップでエラーが発生します。ここでオブジェクトdtypeを指定すると、整数と配列を含む配列(4,4)に変換できます。
In [647]: np.array(alist, dtype=object)
Out[647]:
array([[1, array([[ 1., 1., 1., 1.]]), 64, 64],
[2, array([[ 1., 1., 1., 1.]]), 64, 64],
[3, array([[ 1., 1., 1., 1.]]), 64, 64],
[4, array([[ 1., 1., 1., 1.]]), 64, 64]], dtype=object)
しかし、h5py
は、その種の配列を保存できません。
私はそのリストから構造化された配列を作ることができる:これはタプルのリスト、重要なディテールであるため、動作するように起こる
In [649]: np.array(alist, dtype='i,4i,i,i')
Out[649]:
array([(1, [1, 1, 1, 1], 64, 64), (2, [1, 1, 1, 1], 64, 64),
(3, [1, 1, 1, 1], 64, 64), (4, [1, 1, 1, 1], 64, 64)],
dtype=[('f0', '<i4'), ('f1', '<i4', (4,)), ('f2', '<i4'), ('f3', '<i4')])
。
In [651]: arr = np.array(alist, dtype='i,4i,i,i')
In [652]: f.create_dataset('alist', data=arr)
Out[652]: <HDF5 dataset "alist": shape (4,), type "|V28">
と私も読んで、タプルのリストに戻って、それを変換することができます::h5py
はそれを保存することができますしかし、より頻繁に
In [654]: f['alist'][:].tolist()
Out[654]:
[(1, array([1, 1, 1, 1]), 64, 64),
(2, array([1, 1, 1, 1]), 64, 64),
(3, array([1, 1, 1, 1]), 64, 64),
(4, array([1, 1, 1, 1]), 64, 64)]
は、私は、このような配列でもフィールド名にアクセスしたい:
In [655]: f['alist']['f1']
Out[655]:
array([[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]])
しかし、構造化配列に慣れるにはnumpy
が十分かどうか分かりますか?このようなリストを作成する特別な理由はありますか?スタイルの計算には特に役に立ちません。numpy
別の方法として、列を別々の列に保ち、それらを個別に保存することもできます。
1つの配列要素に書き込もうとしているデータがシーケンスと同じように聞こえるからです。my_listの内容をチェックし、手動でデバッグしてください。 – Vinny
'h5py'は、pythonリスト。また、オブジェクトdtypeにすることもできません。それは構造化配列を扱うことができます。 1つの化合物ではなく複数の配列としてデータを保存する必要があるかもしれません。 – hpaulj
お返事ありがとうございます。私のリストをh5に保存できる方法はありますか?またはnumpy配列にリストを変換することができます – naik3