Klingt wie Sie eine strukturierte Anordnung, so etwas wie dieses einfache Beispiel haben:
In [158]: x = np.ones((5,), dtype='i,i,f,f')
In [159]: x
Out[159]:
array([(1, 1, 1., 1.), (1, 1, 1., 1.), (1, 1, 1., 1.),
(1, 1, 1., 1.), (1, 1, 1., 1.)],
dtype=[('f0', '<i4'), ('f1', '<i4'), ('f2', '<f4'), ('f3', '<f4')])
In [160]: x[0]
Out[160]: (1, 1, 1., 1.)
In [161]: type(x[0])
Out[161]: numpy.void
x[0]
ist ein Rekord, als Tupel angezeigt. Der Zugriff auf Felder nach Namen (nicht durch ‚Spalte‘ index):
In [162]: x['f0']
Out[162]: array([1, 1, 1, 1, 1], dtype=int32)
In [163]: x['f2'] = np.arange(5)
In [165]: x['f1'] = [10,12,8,0,3]
In [166]: x
Out[166]:
array([(1, 10, 0., 1.), (1, 12, 1., 1.), (1, 8, 2., 1.),
(1, 0, 3., 1.), (1, 3, 4., 1.)],
dtype=[('f0', '<i4'), ('f1', '<i4'), ('f2', '<f4'), ('f3', '<f4')])
In [168]: x[['f2','f3']] # 2 fields at once
Out[168]:
array([(0., 1.), (1., 1.), (2., 1.), (3., 1.), (4., 1.)],
dtype=[('f2', '<f4'), ('f3', '<f4')])
Dies ist praktisch, wenn ‚Spalten‘ verschiedene Dinge enthalten sollen, zum Beispiel Strings in einem, ganze Zahlen in einem anderen. Es kann jedoch schwierig sein, ein solches Array in ein 2D-Array desselben numerischen Typs umzuwandeln.
view
und astype
Arbeit in begrenzten Fällen, aber tolist
ist das robusteste Konversionsmedium, das mir bekannt ist.
In [179]: x.tolist()
Out[179]:
[(1, 10, 0.0, 1.0),
(1, 12, 1.0, 1.0),
(1, 8, 2.0, 1.0),
(1, 0, 3.0, 1.0),
(1, 3, 4.0, 1.0)]
In [180]: np.array(x.tolist())
Out[180]:
array([[ 1., 10., 0., 1.],
[ 1., 12., 1., 1.],
[ 1., 8., 2., 1.],
[ 1., 0., 3., 1.],
[ 1., 3., 4., 1.]])
beachte, dass die tolist
für die strukturierte Anordnung eine Liste von Tupeln ist, während tolist
für einen 2D-Array ist eine Liste von Listen. In dieser Richtung spielt dieser Unterschied keine Rolle. Anders herum ist der Unterschied wichtig.
Wie haben Sie dieses Array generiert? Von einer csv
mit genfromtxt
? Wie von einem anderen numerischen Paket ausgegeben?
Jesus Christus. Genau das habe ich gebraucht. Ich danke dir sehr!! Ich habe es nicht erzeugt, ich wurde es übergeben. :) Ich glaube nicht, dass ich es jemals so zusammenfalten würde, wenn ich die Macht hätte, es zu generieren. – Spacey