Python: image de tableau 3D (numpy.array)

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.

Déclencheur

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.

ÉTAPE 1. Image de base de l'arrangement

la revue.

Tableau unidimensionnel

>>> 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) $. qiita_array1.png

Tableau bidimensionnel

>>> 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. qiita_array2.png 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])

q_ar2_sl.jpg

Tableau en trois dimensions

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. qiita_array3.jpg 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]])

q_ar3_sl.jpg

ÉTAPE 2. Ajoutez un axe au réseau pour augmenter la dimension

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.

D'une dimension à deux dimensions

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

q_ar_newax2.jpg

De la 2ème dimension à la 3ème dimension

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

q_ar_newax3.jpg

Recommended Posts

Python: image de tableau 3D (numpy.array)
Piège de tableau bidimensionnel Python [copie du tableau]
traitement d'image python
Tableau multidimensionnel Python
Python> lien> Initialisation et affectation de tableaux 2D
[Débutant] Tableau Python
principes de base des tableaux python
Calculer IDCT 2D ~ Python
Premier traitement d'image Python
[Python] Acing binaire 2020D
Format d'image en Python
calcul de tableau numpy python
Traitement d'image avec Python
[python] Opération de tranche de tableau
python --Exporte l'histogramme bidimensionnel par Matplotlib sous forme de tableau
Traitement d'image avec Python (partie 2)
Mémo Python (pour moi): Array
Tri rapide d'un tableau en Python 3
Tableau multidimensionnel vide en python
Édition d'image avec python OpenCV
Créer un gif 3D avec python3
Comment transloquer un tableau à deux dimensions en utilisant uniquement python [Note]
Tri des fichiers image avec Python (2)
Tri des fichiers image avec Python (3)
python> Gestion des tableaux 2D
Histoire de trébucher avec le tableau Python
Résoudre ABC175 D en Python
Traitement d'image avec Python (partie 1)
Tweet avec image en Python
Tri des fichiers image avec Python
Créer un tableau numpy python
Traitement d'image avec Python (3)
Traitement d'image par python (Pillow)
Collection de traitement d'image en Python
AtCoder ABC 182 Python (A ~ D)
Conversion de type de données d'image [Python]
[Python] Traitement d'image avec scicit-image
Découpez une image avec python
Capture d'image de Firefox en utilisant Python
[Python] Utilisation d'OpenCV avec Python (filtrage d'image)
Accès en indice au tableau numpy python
Implémentation de la segmentation d'image en python (Union-Find)
Analyse de la structure du squelette en trois dimensions avec Python
[Python] Utilisation d'OpenCV avec Python (transformation d'image)
Résoudre ABC166 A ~ D avec Python
Workflow pour convertir une formule (image) en python
Exécutez l'image Docker de TensorFlow sur Python3
Notes personnelles pour le traitement d'images python
Traitement d'image avec la binarisation Python 100 knocks # 3
Image de conteneur recommandée pour les applications Python
Faisons du scraping d'images avec Python
python x tensoflow x reconnaissance de visage d'image
Application Python: Numpy Partie 3: Double tableau
[Python] Comment permuter les valeurs de tableau
Erreur python d'aujourd'hui: l'image est vide
Comparez les boucles de tableau Python et JavaScript
Trouver la similitude d'image avec Python + OpenCV
100 traitement d'image par Python Knock # 2 Échelle de gris
Introduction à l'analyse d'image opencv python