Liste von Listen in numpy-Array

Lesezeit: 6 Minuten

Liste von Listen in numpy Array
Richa Sachdev

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.

1643908569 367 Liste von Listen in numpy Array
Bastian

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 ein Array 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)

  • Danke, bin dafür hergekommen. Ich benutze numpy schon eine Weile und fand dieses Verhalten nicht trivial. Vielen Dank, dass Sie sich die Zeit genommen haben, diesen allgemeineren Fall zu erklären.

    – Adam Hughes

    29. Oktober 14 um 0:07 Uhr


  • dtype=float funktioniert auch, es wird konvertieren None zu np.nanwas nützlich sein kann.

    Benutzer13517564

    22. Mai 20 um 12:08 Uhr

  • Auf Python 3.9 musste ich verwenden (np.vectorize(len)(x)).max() anstatt max(map(len, x)) auf der dritten Lösung

    – Begoodpy

    3. Juni 21 um 6:46 Uhr


  • Und Sie erhalten eine Warnung: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray return array(a, dtype, copy=False, order=order)

    – Begoodpy

    3. Juni 21 um 6:47 Uhr


Liste von Listen in numpy Array
Ignacio Vazquez-Abrams

>>> numpy.array([[1, 2], [3, 4]]) 
array([[1, 2], [3, 4]])

  • Dadurch wird eine Liste von Listen automatisch in ein 2D-Array konvertiert, da die Länge aller enthaltenen Listen gleich ist. Wissen Sie, wie man das nicht macht: ein Array von Listen erstellen, auch wenn alle Listen die gleiche Länge haben? Oder ist es möglich, ein 2D-Array in ein 1D-Array eines 1D-Arrays zu konvertieren (effizient meine ich, keine iterative Methode oder Python-Kartenmaterial)

    – Juh_

    4. Oktober 12 um 9:58 Uhr


  • Wenn das bei Ihnen nicht funktioniert, weil Ihre Unterlisten nicht gleichmäßig groß sind, sehen Sie sich die folgende Antwort an.

    – Nikana Reklawyks

    17. Oktober 16 um 5:27 Uhr

  • @NikanaReklawyks Ich war verwirrt, nachdem ich mir die Antwort angesehen hatte, aber Ihr Kommentar war hilfreich. Ich fand heraus, dass meine Liste mit Listen gezackt war, obwohl es nicht sein sollte.

    – Nikhil Girraj

    21. Dezember 19 um 5:25 Uhr

  • Wie schnell ist das in Bezug auf die Länge des Streits? Ich sehe keine gute Antwort in der Dokumentation?

    – Zarking

    5. August 2020 um 0:54 Uhr

1643908570 38 Liste von Listen in numpy Array
2cynykyl

Da dies die Top-Suche bei Google zum Konvertieren einer Liste von Listen in ein Numpy-Array ist, 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 zum ersten Mal daran dachte, es so zu machen, war ich ziemlich zufrieden mit mir, 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 erstellt, daher habe ich die hinzugefügt concatenate.

Wie auch immer … ich bevorzuge die hstack Ansatz für die elegante Verwendung von Numpy.

  • Während einige Leute danach suchen, bin ich mir ziemlich sicher, dass das OP einen mehrdimensionalen nparr wollte.

    – Nathan

    8. Juni 18 um 19:18 Uhr

Es ist so einfach wie:

>>> lists = [[1, 2], [3, 4]]
>>> np.array(lists)
array([[1, 2],
       [3, 4]])

1643908571 826 Liste von Listen in numpy Array
gepanzerter Elch

Auch hier habe ich nach der Suche nach dem Problem, verschachtelte Listen mit N Ebenen in ein N-dimensionales Array zu konvertieren, nichts gefunden, also hier mein Weg:

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

  • Beachten Sie, dass Sie die verschachtelte Listenstruktur nicht benötigen, wenn Sie bereits über diese verfügen [...[...[...]]] Teil. Sie brauchen nur anzurufen np.arraymit ndmin=number-of-list-layers. (obwohl ich in meinem Fall benötigte ndmin=number-of-list-layers-minus-1 aus irgendeinem Grund, sonst eine zusätzliche Ebene erstellt – muss untersucht werden)

    – Venryx

    19. Mai 20 um 3:50 Uhr


  • Ah okay, das Problem in meinem Fall ist, dass für die tiefste “Listenschicht” die Listen nicht alle die gleiche Länge hatten, was verursachte np.array um diese tiefsten Listen einfach zu “verpacken”, anstatt sie in numpy-Arrays umzuwandeln.

    – Venryx

    19. Mai 20 um 4:34 Uhr

  • xi = [[[3, 4], [3, 4]], [[3, 4], [3, 4]]] gibt array([[[3, 4], [3, 4]], [[3, 4], [3, 4]]]). Ich sehe hier nur das Array an der äußeren Schicht. Ich dachte, die Frage ist, alles in ein numpy-Array zu konvertieren? Oder habe ich ein falsches Beispiel gewählt?

    – Frage an42

    2. Juni 21 um 18:53 Uhr


1643908571 515 Liste von Listen in numpy Array
seralouk

Das OP gab an, dass “die Zeilen einzelne Unterlisten sind und jede Zeile die Elemente in der Unterliste enthält”.

Unter der Annahme, dass die Verwendung von numpy ist nicht verboten (da das Flair numpy im OP hinzugefügt wurde), die Verwendung vstack:

import numpy as np

list_of_lists= [[1, 2, 3], [4, 5, 6], [7 ,8, 9]]

array = np.vstack(list_of_lists)
# array([[1, 2, 3],
#        [4, 5, 6],
#        [7, 8, 9]])

oder einfacher (wie in einer anderen Antwort erwähnt),

array = np.array(list_of_lists)

  • Beachten Sie, dass Sie die verschachtelte Listenstruktur nicht benötigen, wenn Sie bereits über diese verfügen [...[...[...]]] Teil. Sie brauchen nur anzurufen np.arraymit ndmin=number-of-list-layers. (obwohl ich in meinem Fall benötigte ndmin=number-of-list-layers-minus-1 aus irgendeinem Grund, sonst eine zusätzliche Ebene erstellt – muss untersucht werden)

    – Venryx

    19. Mai 20 um 3:50 Uhr


  • Ah okay, das Problem in meinem Fall ist, dass für die tiefste “Listenschicht” die Listen nicht alle die gleiche Länge hatten, was verursachte np.array um diese tiefsten Listen einfach zu “verpacken”, anstatt sie in numpy-Arrays umzuwandeln.

    – Venryx

    19. Mai 20 um 4:34 Uhr

  • xi = [[[3, 4], [3, 4]], [[3, 4], [3, 4]]] gibt array([[[3, 4], [3, 4]], [[3, 4], [3, 4]]]). Ich sehe hier nur das Array an der äußeren Schicht. Ich dachte, die Frage ist, alles in ein numpy-Array zu konvertieren? Oder habe ich ein falsches Beispiel gewählt?

    – Frage an42

    2. Juni 21 um 18:53 Uhr


1643908571 227 Liste von Listen in numpy Array
Nagabhushan SN

Ich hatte eine Liste gleich langer Listen. Sogar dann Ignacio Vazquez-Abrams‘s Antwort hat bei mir nicht funktioniert. Ich habe ein 1-D-numpy-Array, dessen Elemente Listen sind. Wenn Sie auf dasselbe Problem gestoßen sind, können Sie die folgende Methode verwenden

Benutzen 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)))

  • warum in aller Welt würden Sie weiter stapeln, wenn Sie wissen, dass Sie 10 Listen haben, warum nicht np.empty((10, 4)) und dann einfach auffüllen?

    – Medi

    20. August 19 um 7:32 Uhr

.

757950cookie-checkListe von Listen in numpy-Array

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy