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.
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.
Rezension.
>>> 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) $.
>>> 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. 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])
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. 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]])
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.
>>> 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]])
>>> 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]]])
Recommended Posts