Wie man ein 2D-Array in Python initiiert

Jinku Hu 30 Januar 2023
  1. List Verständnismethode zum Initiieren eines 2D-Arrays
  2. Verschachtelte range Methode zur Initiierung eines 2D Arrays
  3. NumPy Methode zur Initiierung eines 2D-Arrays
Wie man ein 2D-Array in Python initiiert

Dieses Tutorial führt in verschiedene Methoden ein, um ein 2D-Array in Python zu initiieren. In den folgenden Beispielen werden wir ein 3x5 2-D Array erstellen.

List Verständnismethode zum Initiieren eines 2D-Arrays

>>> column, row = 3, 5
>>> array2D = [[0 for _ in range(row)] for _ in range(column)]
>>> array2D
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]

Diese verschachtelte Listenauffassungs-Methode erzeugt ein 2-D Array mit dem Anfangswert 0. Natürlich können Sie den Initialwert in einen beliebigen Wert ändern, den Sie in Ihrer Anwendung zuweisen müssen.

Verschachtelte range Methode zur Initiierung eines 2D Arrays

Wenn man sich nicht um den Anfangswert im 2D-Array kümmert, könnte der Wert 0 sogar eliminiert werden.

In Python 2.x

>>> column, row = 3, 5
>>> A = [range(row) for _ in range(column)]
>>> A
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]

In Python 3.x

>>> column, row = 3, 5
>>> A = [range(row) for _ in range(column)]
>>> A
[range(0, 5), range(0, 5), range(0, 5)]

In Python 3.x konnten wir range(x) nicht einfach benutzen, um ein 2D-Array zu initiieren, weil range in Python 3.x ein Objekt zurückgibt, das eine Folge von ganzen Zahlen enthält, aber nicht eine Liste von ganzen Zahlen wie in Python 2.x.

range in Python 3.x in ähnlicher Weise wie xrange in Python 2.x. Das range Objekt in Python 3.x ist unveränderlich, daher weisen Sie seinen Elementen keine Elemente zu.

Wenn Sie die Zuweisung von Elementen benötigen, müssen Sie das range in ein list Objekt konvertieren.

>>> A = [list(range(row)) for _ in range(column)]
>>> A
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]

[0] * N Methode, um ein 2D-Array zu initiieren

Eine pythonische Möglichkeit, ein 2D-Array zu initiieren, könnte sein

>>> column, row = 3, 5
>>> A = [[0]*row for _ in range(column)]
>>> A
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]

Obwohl wir vorsichtig sein sollten, wenn wir die Listenmultiplikation verwenden, weil sie einfach eine Sequenz mit mehreren Verweisen auf ein und dasselbe Objekt erzeugt, sind wir erleichtert, hier [0]*n zu verwenden, weil das Datenobjekt 0 unveränderlich ist, so dass wir nie auf Probleme stoßen werden, auch nicht mit Verweisen auf dasselbe unveränderliche Objekt.

NumPy Methode zur Initiierung eines 2D-Arrays

Neben dem nativen Python-Array sollte NumPy die beste Option sein, um ein 2-D-Array, genauer gesagt eine Matrix, zu erstellen.

Mit numpy.zeros könnte man eine mit Nullen gefüllte Matrix erstellen.

>>> import numpy as np
>>> column, row = 3, 5
>>> np.zeros(column, row)
array([[0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.]])

Oder eine mit Ones gefüllte Matrix mit numpy.ones initiieren.

>>> import numpy as np
>>> column, row = 3, 5
>>> np.ones((column, row))
array([[1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1.]])

Sie könnten sogar ein neues Array erstellen, ohne Einträge mit numpy.empty zu initialisieren.

>>> import numpy as np
>>> column, row = 3, 5
>>> np.empty((5,5))
array([[6.23042070e-307, 4.67296746e-307, 1.69121096e-306,
        1.33511562e-306, 1.89146896e-307],
       [7.56571288e-307, 3.11525958e-307, 1.24610723e-306,
        1.37962320e-306, 1.29060871e-306],
       [2.22518251e-306, 1.33511969e-306, 1.78022342e-306,
        1.05700345e-307, 1.11261027e-306],
       [1.11261502e-306, 1.42410839e-306, 7.56597770e-307,
        6.23059726e-307, 1.42419530e-306],
       [7.56599128e-307, 1.78022206e-306, 8.34451503e-308,
        2.22507386e-306, 7.20705877e+159]])
Anmerkungen
Es ist eine bessere Lösung, wenn Sie zuerst das leere Array erstellen und dann später die Elementwerte zuweisen wollen. Man sollte sich aber bewusst sein, dass sich in dem Array Zufallswerte befinden, so dass es riskant sein kann, wenn man auf das Array durch Indizierung zugreift, bevor der Wert des entsprechenden Indexes zugewiesen wurde.
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Verwandter Artikel - Python Array