Wie konvertiere ich eine einfache Liste von Listen in ein Numpy-Array? Die Zeilen sind einzelne Unterlisten und jede Zeile enthält die Elemente in der Unterliste.
Wie konvertiere ich eine einfache Liste von Listen in ein Numpy-Array? Die Zeilen sind einzelne Unterlisten und jede Zeile enthält die Elemente in der Unterliste.
Antworten:
Wenn Ihre Listenliste Listen mit unterschiedlicher Anzahl von Elementen enthält, funktioniert die Antwort von Ignacio Vazquez-Abrams nicht. Stattdessen gibt es mindestens 3 Optionen:
1) Erstellen Sie ein Array von Arrays:
x=[[1,2],[1,2,3],[1]]
y=numpy.array([numpy.array(xi) for xi in x])
type(y)
>>><type 'numpy.ndarray'>
type(y[0])
>>><type 'numpy.ndarray'>
2) Erstellen Sie eine Reihe von Listen:
x=[[1,2],[1,2,3],[1]]
y=numpy.array(x)
type(y)
>>><type 'numpy.ndarray'>
type(y[0])
>>><type 'list'>
3) Machen Sie zuerst die Listen gleich lang:
x=[[1,2],[1,2,3],[1]]
length = max(map(len, x))
y=numpy.array([xi+[None]*(length-len(xi)) for xi in x])
y
>>>array([[1, 2, None],
>>> [1, 2, 3],
>>> [1, None, None]], dtype=object)
>>> numpy.array([[1, 2], [3, 4]])
array([[1, 2], [3, 4]])
Da dies die häufigste Suche bei Google ist, um eine Liste von Listen in ein Numpy-Array zu konvertieren, biete ich Folgendes an, obwohl die Frage 4 Jahre alt ist:
>>> x = [[1, 2], [1, 2, 3], [1]]
>>> y = numpy.hstack(x)
>>> print(y)
[1 2 1 2 3 1]
Als ich daran dachte, es so zu machen, war ich ziemlich zufrieden mit mir selbst, weil es soooo einfach ist. Nach dem Timing mit einer größeren Liste von Listen ist dies jedoch tatsächlich schneller:
>>> y = numpy.concatenate([numpy.array(i) for i in x])
>>> print(y)
[1 2 1 2 3 1]
Beachten Sie, dass @ Bastiaans Antwort Nr. 1 keine einzige fortlaufende Liste enthält, daher habe ich die hinzugefügt concatenate
.
Wie auch immer ... Ich bevorzuge den hstack
Ansatz für die elegante Verwendung von Numpy.
Nachdem ich nach dem Problem gesucht hatte, verschachtelte Listen mit N Ebenen in ein N-dimensionales Array zu konvertieren, habe ich wieder nichts gefunden.
import numpy as np
new_array=np.array([[[coord for coord in xk] for xk in xj] for xj in xi], ndmin=3) #this case for N=3
[...[...[...]]]
Teil nicht benötigen, wenn Sie bereits über die Struktur verschachtelter Listen verfügen . Sie müssen nur anrufen np.array
, mit ndmin=number-of-list-layers
. (obwohl ich in meinem Fall ndmin=number-of-list-layers-minus-1
aus irgendeinem Grund eine zusätzliche Ebene erstellt habe - muss untersucht werden)
np.array
, dass diese tiefsten Listen nur "umbrochen" wurden, anstatt sie in numpy Arrays umzuwandeln.
Ich hatte eine Liste von Listen gleicher Länge. Sogar dannIgnacio Vazquez-Abrams
die Antwort für mich nicht geklappt. Ich habe ein 1-D-Numpy-Array, dessen Elemente Listen sind. Wenn Sie mit demselben Problem konfrontiert waren, können Sie die folgende Methode verwenden
Verwenden numpy.vstack
import numpy as np
np_array = np.empty((0,4), dtype='float')
for i in range(10)
row_data = ... # get row_data as list
np_array = np.vstack((np_array, np.array(row_data)))