Je ne suis pas doué pour imaginer un tableau tridimensionnel de numpy avec ma tête, alors où signifie axis = 1? Ce sera comme ça à chaque fois, je vais donc résumer ma propre compréhension. Ci-après, «tableau» fait référence à np.array.
Dans "Essence of Machine Learning" (Auteur: Koichi Kato), lorsqu'il y a un tableau bidimensionnel X avec sept vecteurs bidimensionnels arrangés et un tableau bidimensionnel cluster_centers avec trois vecteurs bidimensionnels arrangés, le carré de la distance entre les deux vecteurs A été calculé comme suit (extrait de la 3ème édition pp.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]])
C'était tellement élégant que je ne savais pas ce que je faisais. Pleurs Qu'est-ce que np.newaxis? Cela part de ce qu'il est, et de quoi s'agit-il parce que la position de np.newaxis est différente entre X et cluster_centers, et elle est transposée ou additionnée ... (Le livre donne une explication supplémentaire, Pourtant, l'obstacle était trop élevé pour moi) Voici donc comment j'en suis venu à comprendre cela. Comme il est devenu long, je diviserai l'article en première et seconde moitié. Dans cet article, l'image du tableau et ce que fait np.newaxis. La seconde moitié est ici.
la revue.
>>> x = np.array([1, 2, 3])
C'est un vecteur. Pour l'instant, imaginez le vecteur horizontal $ (1, 2, 3) $ comme indiqué.
>>> y = np.array([1])
De plus, même s'il n'y a qu'un seul élément, c'est un "tableau" unidimensionnel. Puisqu'il est possible que le nombre d'éléments augmente, l'image n'a qu'un seul nombre dans les carrés alignés côte à côte. Comme $ (1, \ ldots) $.
>>> A = np.array([[1, 2, 3],
[4, 5, 6]])
Comme vous pouvez le voir, l'image est que les vecteurs horizontaux sont connectés verticalement. En tant que matrice
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]])
Il s'agit également d'un tableau à deux dimensions. B est une image dans laquelle il n'y a qu'un seul vecteur horizontal qui doit être connecté verticalement, et les nombres sont inclus uniquement dans la première rangée des carrés disposés verticalement et horizontalement. En C, trois vecteurs horizontaux avec un seul élément sont alignés verticalement. Comment extraire les éléments du tableau et l'image de l'axe sont les suivants.
#Pour l'index, spécifiez le deuxième axe de dimension (direction verticale) pour le premier nombre et la direction horizontale pour le deuxième nombre.
>>> A[1, 2]
6
#Si vous remplacez le nombre par deux points, tous les axes seront récupérés. La dimension diminue de un pour devenir vecteur.
>>> A[0, :]
array([1, 2, 3])
#Même si l'axe vertical est pris, il devient unidimensionnel.
>>> A[:, 1]
array([2, 5])
#L'axe vertical (deuxième dimension) est l'axe=0, l'axe horizontal (première dimension) est l'axe=1 (A.somme est la somme de chaque axe)
>>> A.sum(axis=0)
array([5, 7, 9])
>>> A.sum(1) # "axis="Peut être omis
array([6, 15])
Le tableau tridimensionnel donne l'impression qu'il y a de nombreux carrés bidimensionnels dans la direction de la profondeur.
>>> X = np.array([[[1, 2, 3],
[4, 5, 6]],
[[7, 8, 9],
[10, 11, 12]]])
>>> Y = np.array([[[1]]])
Un tableau en trois dimensions comme Y. Il y a des carrés dans la profondeur, la longueur et la largeur, mais un seul est rempli. Tout comme nous avons pu extraire un tableau unidimensionnel d'un tableau bidimensionnel ci-dessus, nous pouvons extraire un tableau bidimensionnel d'un tableau tridimensionnel en utilisant deux deux points. Cependant, il est un peu difficile de saisir l'image.
#Le premier nombre est le troisième axe de dimension (direction de la profondeur), le deuxième est le deuxième axe de dimension (vertical) et le troisième est la première dimension (horizontale).
>>> X[0, 1, 2]
6
#Axe de profondeur(axis=0)Sortez le 0e de
>>> X[0, :, :]
array([[1, 2, 3],
[4, 5, 6]])
#Axe vertical(axis=1)Sortez le premier de
>>> X[:, 1, :]
array([[ 4, 5, 6],
[10, 11, 12]])
#Axe horizontal(axis=2)Sortez le deuxième de
>>> X[:, :, 2]
array([[ 3, 6],
[ 9, 12]])
Vous pouvez également ajouter un nouvel axe au tableau pour augmenter sa dimension, par opposition à l'opération de découpage que vous avez effectuée ci-dessus pour récupérer le tableau.
>>> x = np.array([1, 2, 3])
#Np pour ajouter un axe.Utilisez un nouvel axe.
# axis=Ajouté 0 (axe vertical)
>>> x[np.newaxis, :]
array([[1, 2, 3]])
# axis=Ajouter 1 Élément x vertical(axis=0)Côte à côte, axe horizontal(axis=1)faire.
>>> x[:, np.newaxis]
array([[1],
[2],
[3]])
# np.le nouvel axe peut être remplacé par Aucun
>>> x[None, :]
array([[1, 2, 3]])
>>> A = np.array([[1, 2, 3],
[4, 5, 6]])
# axis=Ajouté 0 (axe de profondeur)
>>> A[np.newaxis, :, :]
array([[[1, 2, 3],
[4, 5, 6]]])
# axis=Ajouté 1 (axe vertical). Disposez les éléments de x sur la surface supérieure de la grille tridimensionnelle.
>>> A[:, np.newaxis, :]
array([[[1, 2, 3]],
[[4, 5, 6]]])
# axis=Ajouté 2 (axe horizontal). Disposez les éléments de x sur les faces latérales de la grille tridimensionnelle.
>>> A[:, :, np.newaxis]
array([[[1],
[2],
[3]],
[[4],
[5],
[6]]])
Recommended Posts