Wie ich in einem Kommentar schrieb, h5py
Arrays speichert, keine Listen. Also versucht es mit Ihrem Anruf, Ihre Liste in ein Array zu konvertieren:
Dieser Schritt erzeugt den Fehler. Wenn ich nun ein Objekt dtype spezifiziere, kann ich es in ein Array umwandeln, ein (4,4) welches Ganzzahlen und Arrays enthält.
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)
Aber h5py
kann nicht diese Art von Array speichern.
Ich konnte eine strukturierte Anordnung aus dieser Liste machen mit:
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')])
Dies geschieht zu arbeiten, weil es sich um eine Liste von Tupeln, ein wichtiges Detail ist. h5py
kann man erkennen, sparen:
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">
und ich kann sie sogar wieder in eine Liste von Tupeln lesen und konvertieren:
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)]
obwohl öfter ich Name sein Feld ein solches Array zugreifen würde:
In [655]: f['alist']['f1']
Out[655]:
array([[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]])
Aber ich frage mich, ob Sie genug wissen numpy
, um mit strukturierten Arrays vertraut zu sein. Gibt es einen besonderen Grund, warum Sie die Liste so aufbauen? Es ist nicht besonders nützlich für numpy
Stilberechnungen.
Eine weitere Option besteht darin, die Spalten in separaten Arrays zu speichern und diese einzeln zu speichern.
von dem Fehler klingt es wie die Daten, die Sie versuchen, in ein einzelnes Array-Element zu schreiben ist eine Sequenz .. Sie sollten überprüfen Sie Ihre my_list Inhalt und versuchen, es manuell zu debuggen – Vinny
'h5py' kann nur numpy Arrays, nicht Python-Listen . Und es kann auch kein Objekt dtype sein. Es kann strukturierte Arrays verarbeiten. Möglicherweise müssen Sie Ihre Daten als mehrere Arrays statt einer zusammengesetzten speichern. – hpaulj
Danke für die Antwort. Gibt es eine Möglichkeit, dass ich meine Liste auf h5 speichern kann. oder kann ich Liste zu numpy Array – naik3