Python: 3D-Array-Bild (numpy.array)

Ich kann mir nicht gut ein dreidimensionales Array von Numpys mit meinem Kopf vorstellen. Wo bedeutet also Achse = 1? Es wird jedes Mal so sein, also werde ich mein eigenes Verständnis zusammenfassen. Im Folgenden bezieht sich "Array" auf np.array.

Auslösen

In "Essence of Machine Learning" (Autor: Koichi Kato) ist das Quadrat des Abstands zwischen den beiden Vektoren, wenn ein zweidimensionales Array X mit sieben angeordneten zweidimensionalen Vektoren und ein zweidimensionales Array cluster_centers mit drei angeordneten zweidimensionalen Vektoren vorhanden ist Wurde wie folgt berechnet (Auszug aus der 3. Auflage S. 354-356).

>>> X = np.array([[1, 2],
                  [2, 3],
                  [3, 4],
                  [4, 5],
                  [5, 6],
                  [7, 9]])

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

>>> ((X[:, :, np.newaxis]
      - cluster_centers.T[np.newaxis, :, :])**2).sum(axis=1)
array([[  1,   1,   5],
       [  5,   1,   1],
       [ 13,   5,   1],
       [ 25,  13,   5],
       [ 41,  25,  13],
       [ 61,  41,  25],
       [100,  74,  52]])

Es war so elegant, dass ich nicht wusste, was ich tat. Weinen Was ist np.newaxis? Es beginnt mit dem, was es ist, und was ist es, weil die Position von np.newaxis zwischen X und cluster_centers unterschiedlich ist und transponiert oder summiert wird ... (Das Buch gibt eine ergänzende Erklärung, Trotzdem war die Hürde zu hoch für mich) So habe ich das verstanden. Da es lang geworden ist, werde ich den Artikel in die erste und zweite Hälfte unterteilen. In diesem Artikel wird das Bild des Arrays und die Funktionen von np.newaxis beschrieben. Die zweite Hälfte ist hier.

SCHRITT 1. Grundbild der Anordnung

Rezension.

Eindimensionales Array

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

Es ist ein Vektor. Stellen Sie sich zunächst den horizontalen Vektor $ (1, 2, 3) $ wie gezeigt vor.

>>> y = np.array([1])

Auch wenn es nur ein Element gibt, handelt es sich um ein eindimensionales "Array". Da die Möglichkeit besteht, dass sich die Anzahl der Elemente erhöht, enthält das Bild nur eine Zahl in den nebeneinander angeordneten Quadraten. Wie $ (1, \ ldots) $. qiita_array1.png

Zweidimensionales Array

>>> A = np.array([[1, 2, 3],
                  [4, 5, 6]])

Wie Sie sehen können, ist das Bild, dass die horizontalen Vektoren vertikal verbunden sind. Als Matrix

A = \left(
    \begin{array}{ccc}
      1 & 2 & 3 \\
      4 & 5 & 6 \\
    \end{array}
  \right).
>>> B = np.array([[1, 2, 3]])
>>> C = np.array([[1],
                  [2],
                  [3]])

Dies ist auch ein zweidimensionales Array. B ist ein Bild, in dem nur ein horizontaler Vektor vertikal verbunden werden soll und nur die erste Reihe der vertikal und horizontal angeordneten Quadrate Zahlen enthält. In C sind drei horizontale Vektoren mit nur einem Element vertikal ausgerichtet. qiita_array2.png So extrahieren Sie die Elemente des Arrays und das Bild der Achse wie folgt.

#Geben Sie für den Index die zweite Dimensionsachse (vertikale Richtung) für die erste Zahl und die horizontale Richtung für die zweite Zahl an.
>>> A[1, 2]
6

#Wenn Sie die Zahl durch einen Doppelpunkt ersetzen, werden alle Achsen abgerufen. Die Dimension wird um eins verringert, um ein Vektor zu werden.
>>> A[0, :]  
array([1, 2, 3])

#Selbst wenn die vertikale Achse genommen wird, wird sie eindimensional.
>>> A[:, 1]  
array([2, 5])

#Die vertikale Achse (zweite Dimension) ist die Achse=0, horizontale Achse (erste Dimension) ist Achse=1 (A.Summe ist die Summe für jede Achse)
>>> A.sum(axis=0)  
array([5, 7, 9])
>>> A.sum(1)  # "axis="Kann ausgelassen werden
array([6, 15])

q_ar2_sl.jpg

Dreidimensionales Array

Das dreidimensionale Array scheint viele zweidimensionale Quadrate in Tiefenrichtung zu haben.

>>> X = np.array([[[1,  2,  3],
                   [4,  5,  6]],

                  [[7,  8,  9],
                   [10, 11, 12]]])

>>> Y = np.array([[[1]]])

Ein dreidimensionales Array wie Y. Es gibt Quadrate in Tiefe, Länge und Breite, aber nur eines ist gefüllt. qiita_array3.jpg So wie wir oben ein eindimensionales Array aus einem zweidimensionalen Array extrahieren konnten, können wir mit zwei Doppelpunkten ein zweidimensionales Array aus einem dreidimensionalen Array extrahieren. Es ist jedoch etwas schwierig, das Bild zu erfassen.

#Die erste Zahl ist die Achse der dritten Dimension (Tiefenrichtung), die zweite ist die Achse der zweiten Dimension (vertikal) und die dritte ist die erste Dimension (horizontal).
>>> X[0, 1, 2]
6

#Tiefenachse(axis=0)Nehmen Sie den 0. von
>>> X[0, :, :]
array([[1, 2, 3],
       [4, 5, 6]])

#Vertikale Achse(axis=1)Nehmen Sie den ersten heraus
>>> X[:, 1, :]
array([[ 4,  5,  6],
       [10, 11, 12]])

#Horizontale Achse(axis=2)Nehmen Sie den zweiten heraus
>>> X[:, :, 2]
array([[ 3,  6],
       [ 9, 12]])

q_ar3_sl.jpg

SCHRITT 2. Fügen Sie dem Array eine Achse hinzu, um die Bemaßung zu erhöhen

Sie können dem Array auch eine neue Achse hinzufügen, um seine Dimension zu vergrößern, im Gegensatz zu der oben beschriebenen Aufteilungsoperation zum Abrufen des Arrays.

Von einer Dimension zu zwei Dimensionen

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

#Np, um Achse hinzuzufügen.Neue Achse verwenden.
# axis=0 hinzugefügt (vertikale Achse)
>>> x[np.newaxis, :]
array([[1, 2, 3]])

# axis=Addiere 1 Vertikales x-Element(axis=0)Seite an Seite horizontale Achse(axis=1)machen.
>>> x[:, np.newaxis]
array([[1],
       [2],
       [3]])

# np.Neue Achse kann durch Keine ersetzt werden
>>> x[None, :]
array([[1, 2, 3]])

q_ar_newax2.jpg

Von der 2. Dimension zur 3. Dimension

>>> A = np.array([[1, 2, 3],
                  [4, 5, 6]])

# axis=0 hinzugefügt (Tiefenachse)
>>> A[np.newaxis, :, :]
array([[[1, 2, 3],
        [4, 5, 6]]])

# axis=1 hinzugefügt (vertikale Achse). Ordnen Sie die Elemente von x auf der Oberseite des dreidimensionalen Gitters an.
>>> A[:, np.newaxis, :]
array([[[1, 2, 3]],

       [[4, 5, 6]]])

# axis=2 hinzugefügt (horizontale Achse). Ordnen Sie die Elemente von x auf den Seitenflächen des dreidimensionalen Gitters an.
>>> A[:, :, np.newaxis]
array([[[1],
        [2],
        [3]],

       [[4],
        [5],
        [6]]])

q_ar_newax3.jpg

Recommended Posts

Python: 3D-Array-Bild (numpy.array)
Zweidimensionale Python-Array-Falle [Kopie des Arrays]
Python-Bildverarbeitung
Mehrdimensionales Python-Array
Python> Link> Initialisierung und Zuweisung von 2D-Arrays
[Anfänger] Python-Array
Grundlagen des Python-Arrays
Berechnen Sie 2D IDCT ~ Python
Erste Python-Bildverarbeitung
[Python] Binary Acing 2020D
Bildformat in Python
Berechnung des Python-Numpy-Arrays
Bildverarbeitung mit Python
[Python] Array-Slice-Operation
Python - Exportieren Sie ein zweidimensionales Histogramm von Matplotlib als Array
Bildverarbeitung mit Python (Teil 2)
Python-Memo (für mich): Array
Sortieren Sie schnell ein Array in Python 3
Leeres mehrdimensionales Array in Python
Bildbearbeitung mit Python OpenCV
Erstellen Sie ein 3D-GIF mit Python3
So verschieben Sie ein zweidimensionales Array nur mit Python [Hinweis]
Sortieren von Bilddateien mit Python (2)
Sortieren von Bilddateien mit Python (3)
Python> Umgang mit 2D-Arrays
Stolpern Geschichte mit Python-Array
Löse ABC175 D in Python
Bildverarbeitung mit Python (Teil 1)
Tweet mit Bild in Python
Bilddateien mit Python sortieren
Erstellen Sie ein Python-Numpy-Array
Bildverarbeitung mit Python (3)
Bildverarbeitung mit Python (Pillow)
Bildverarbeitungssammlung in Python
AtCoder ABC 182 Python (A ~ D)
Konvertierung von Bilddatentypen [Python]
[Python] Bildverarbeitung mit Scicit-Image
Schneiden Sie ein Bild mit Python aus
Bilderfassung von Firefox mit Python
[Python] Verwenden von OpenCV mit Python (Bildfilterung)
Indexierter Zugriff auf das Python-Numpy-Array
Implementierte Bildsegmentierung in Python (Union-Find)
Dreidimensionale Skelettstrukturanalyse mit Python
[Python] Verwenden von OpenCV mit Python (Bildtransformation)
Löse ABC166 A ~ D mit Python
Workflow zum Konvertieren der Formel (Bild) in Python
Führen Sie das Docker-Image von TensorFlow unter Python3 aus
Persönliche Notizen für die Python-Bildverarbeitung
Die Bildverarbeitung mit Python 100 klopft an die Binärisierung Nr. 3
Empfohlenes Container-Image für Python-Anwendungen
Lassen Sie uns mit Python Image Scraping durchführen
Python x Tensoflow x Gesichtserkennung
Python-Anwendung: Numpy Teil 3: Double Array
[Python] So tauschen Sie Array-Werte aus
Der heutige Python-Fehler: Das Bild ist leer
Vergleichen Sie Python- und JavaScript-Array-Schleifen
Finden Sie Bildähnlichkeit mit Python + OpenCV
100 Bildverarbeitung mit Python Knock # 2 Graustufen
Einführung in die Bildanalyse opencv python