Python - Notes d'étude de la bibliothèque Numpy

ndarray

  • Nadrray est un objet de tableau à N dimensions, un conteneur rapide et flexible pour les grands ensembles de données
  • Vous pouvez utiliser ce tableau (ndarray) pour effectuer des opérations mathématiques sur tout le bloc de données

Importez le code de la bibliothèque Nump

import numpy as np

Générer des données aléatoires

data = np.random.randn(2, 3)

Insérez la description de l'image ici
–Numpy.random.randn ()

  • La fonction randn renvoie un échantillon ou un ensemble d'échantillons avec une distribution normale standard
  • La distribution normale standard est également appelée distribution u. Il s'agit d'une distribution normale avec 0 comme moyenne et 1 comme écart type, notée N (0, 1)

--Dn signifie chaque dimension, randn (2, 3) signifie retourner un tableau avec 2 lignes et 3 colonnes

Les tableaux peuvent effectuer des opérations mathématiques

  • Multipliez chaque élément du tableau par 10
data * 10

Insérez la description de l'image ici

  • Ajoutez deux tableaux, chaque élément du tableau est ajouté en conséquence
data + data

Insérez la description de l'image ici
Numpy est un conteneur multidimensionnel universel de données isomorphes, dans lequel tous les éléments doivent être du même type.
Chaque tableau a

  • shape (un tuple représentant la taille de chaque dimension)
  • dtype (un objet utilisé pour décrire le type de données d'un tableau)

Jetez un œil à la forme et au type du tableau de données

data.shape

Insérez la description de l'image ici
On peut voir que les données sont un tableau avec 2 lignes et 3 colonnes

data.dtype

Insérez la description de l'image ici
On peut voir que le type de données du tableau de données est 'float64'

Créer ndarray

La fonction array peut être utilisée pour créer un tableau ndarray. Elle accepte tous les objets série (y compris les autres tableaux).
Prenons la conversion d'une liste comme exemple:

data1 = [6, 7.5, 8, 0, 1]
arr1 = np.array(data1)
arr1

Insérez la description de l'image ici
Vous pouvez voir que la liste data1 est convertie dans le tableau arr1

Si la liste est composée d'un ensemble de listes de longueur égale, la fonction de tableau la convertira en un tableau multidimensionnel

data2 = [[1, 2, 3, 4], [5, 6, 7, 8]]
arr2 = np.array(data2)
arr2

Insérez la description de l'image ici
On peut voir que la liste composée de deux listes est convertie en un tableau à 2 dimensions

Nous pouvons utiliser les attributs ndim et shape pour vérifier

arr2.ndim

Insérez la description de l'image ici
-ndim renvoie la dimension du tableau, un seul nombre est renvoyé, qui représente la dimension du tableau

arr2.shape

Insérez la description de l'image ici
-S'il n'y a pas d'instructions spéciales, np.array sélectionnera le type de données le plus correspondant pour les données à créer
-comme arr1, arr2 dans l'exemple ci-dessus, nous pouvons voir le type de données créé
Insérez la description de l'image ici
, s'il y a des décimales dans la liste, le tableau créé par array Le type de données est à virgule flottante ->
si la liste de 'float64' est composée de nombres entiers, alors le type de données du tableau créé par array est integer -> 'int32'

La méthode --np.zeros () peut créer un tableau de tous les 0 avec une longueur ou une forme spécifiée.
Si un nombre 10 est passé, un tableau unidimensionnel de 10 '0 sera créé par défaut

np.zeros(10)

Insérez la description de l'image ici
Le type de données du tableau créé est en virgule flottante

np.zeros(10).dtype

Insérez la description de l'image ici

Passez un tuple représentant la forme, vous pouvez créer un tableau multidimensionnel,
comme créer un tableau à deux dimensions de tous les '0 avec 3 lignes et 6 colonnes

np.zeros((3, 6))

Insérez la description de l'image ici

- La méthode NP.empty () spécifie un tableau non initialisé de longueur ou de forme, ou vous pouvez passer un tuple pour créer un tableau multidimensionnel,
comme la création d'un tableau non initialisé en trois dimensions (2 * 3 lignes et 2 colonnes)

np.empty((2, 3, 2))

Insérez la description de l'image ici
Remarque: l'idée que np.empty renvoie un tableau de tous les 0 n'est pas sûre. Dans de nombreux cas, elle renvoie des valeurs de garbage non initialisées.

np.arange ()

- Le tableau dans numpy est la version tableau de la fonction intégrée de python "gamme". Le
paramètre N est passé, ce qui signifie générer un tableau d'entiers de 0 à (N-1)

Par exemple, créez un tableau d'entiers de 0 à 14

np.arange(15)

Insérez la description de l'image ici

np.arange(15).dtype

Insérez la description de l'image ici
Remarque: Numpy se concentre sur les calculs numériques. S'il n'est pas spécifié, les types de données sont essentiellement "float64" (nombres à virgule flottante)

Voici quelques fonctions de création de tableaux couramment utilisées, qui sont fréquemment utilisées

  • Array: Convertissez les données en ndarray (tableau multidimensionnel), si dtype n'est pas spécifié, il correspondra au type de données le plus approprié pour les données source par défaut
  • asarry: Convertit les données en ndarray (tableau multidimensionnel). La différence entre celui-ci et le tableau est -> Lorsque les données source sont ndarray, array
    copiera une copie de ndarray, mais pas asarray
  • arange: similaire à la plage de fonctions intégrées de python, mais arange renvoie un ndarry et la plage intégrée renvoie une liste
  • ones: Créez un tableau de tous les '1' en fonction de la forme et du type spécifiés, la valeur par défaut est 'flottant64'
  • ones_like: prenez un autre tableau comme paramètre (obtenez la forme du tableau) et créez un tableau de tous les '1 en fonction de la forme du paramètre
  • zeros, zeros_like: similaire à uns et ones_like, mais crée un tableau de tous les '0'
  • empty, empty_like: similaire à ones et ones_like, mais il alloue uniquement de l'espace mémoire, mais ne remplit aucune valeur (toutes les valeurs de garbage non initialisées sont créées)
  • full: utilisez toutes les valeurs de la valeur de remplissage pour créer un tableau basé sur la forme et le dtype spécifiés (simulez un ensemble de fill_value ici)Insérez la description de l'image ici
  • full_like: crée un tableau de la même forme avec la forme d'un autre tableau, la valeur du tableau est fill_value
  • oeil: entrez le paramètre N, créez une matrice d'identité carrée N * N (la diagonale est 1, le reste est 0), le type de tableau est à virgule flottanteInsérez la description de l'image ici
  • identité: identique à np.eye ()

dtype

-Dtype contient les informations nécessaires pour interpréter une partie de la mémoire de ndarry comme un type de données spécifique

Types de données Numpy courants

  • int8: code de type: i1 -> entier signé 8 bits (1 octet)
  • uint8: code de type: u1 -> entier 8 bits (1 octet) non signé
  • int16: code de type: i2 -> entier 16 bits (2 octets) signé
  • uint16: Code de type: u2 -> entier 16 bits (2 octets) non signé
  • int32: code de type: i4 -> entier signé 32 bits (4 octets)
  • uint32: code de type: u4 -> entier 32 bits (4 octets) non signé
  • int64: code de type: i8 -> entier signé 64 bits (8 octets)
  • uint64: code de type: u8 -> entier 64 bits (8 octets) non signé
  • float16: Code de type: f2 -> nombre à virgule flottante demi-précision
  • float32: Code de type: f4 ou f -> nombre à virgule flottante simple précision standard (compatible avec C float)
  • float64: Code de type: f8 ou d -> nombre à virgule flottante double précision standard (compatible avec les objets C double et Python float)
  • float128: Code de type: f16 ou g -> nombre à virgule flottante de précision étendue
  • complex64: code de type: c8 -> un nombre complexe représenté par deux nombres à virgule flottante 32 bits
  • complex128: code de type: c16 -> un nombre complexe représenté par deux nombres à virgule flottante 64 bits
  • complex256: code de type: c32 -> un nombre complexe représenté par deux nombres à virgule flottante de 128 bits
  • booléen: Tapez le code :? -> Type booléen stockant Vrai et Faux
  • objet: code de type: O -> type d'objet Python
  • string_: code de type: S -> type de chaîne de longueur fixe (1 octet par caractère), par exemple, pour créer une chaîne de longueur 10, vous devez utiliser S10
  • unicode_: code de type: U -> type unicode de longueur fixe (le nombre d'octets est déterminé par la plateforme)

- Vous pouvez convertir explicitement un tableau d'un dtype vers un autre dtype en utilisant la méthode astype de ndarray.
Supposons qu'il existe un tableau d'entiers arr

arr = np.array([1, 2, 3, 4, 5])

Insérez la description de l'image ici
Convertir arr en virgule flottante

float_arr = arr.astype(np.float64)

Insérez la description de l'image ici

Si vous convertissez un nombre à virgule flottante en nombre entier, la partie fractionnaire sera tronquée et supprimée.
Par exemple, il existe un tableau à virgule flottante arr2

arr2 = np.array([3.7, -1.2, -2.6, 0.5, 12.9, 10.1])

Insérez la description de l'image ici
Convertir en entier

int_arr2 = arr2.astype(np.int32)

Insérez la description de l'image ici
Vous pouvez voir que le nouveau tableau int_arr2 intercepte et supprime la partie décimale du tableau d'origine
Insérez la description de l'image ici

Vous pouvez également utiliser un type pour convertir un tableau de chaînes en une forme numérique.
Supposons qu'il existe un tableau de chaînes numeric_strings

numeric_strings = np.array(['1.25', '-9.6', '42'], dtype = np.string_)

Insérez la description de l'image ici

  • Remarque: lorsque vous utilisez np.string_ type, faites attention à la longueur de la chaîne, car la taille des données de la chaîne de numpy est fixe et aucune erreur ne sera signalée lors de l'interception.
  • Si pendant le processus de conversion, la conversion de la chaîne -> valeur numérique échoue (par exemple, "un" ne peut pas être converti en valeur numérique 1, une ValueError sera déclenchée

-Nous pouvons également transmettre le dtype d'un tableau comme paramètre à la méthode astype.
Supposons qu'il existe un tableau d'entiers int_array et un tableau à virgule flottante calibres

int_array = np.arange(10)
calibers = np.array([.22, .270, .357, .380, .44, .50], dtype = np.float64)

Insérez la description de l'image ici
Si vous souhaitez convertir int_array dans le même tableau à virgule flottante que les calibres, vous pouvez passer le dtype des calibres dans le paramètre de la méthode astype

int_float = int_array.astype(calibers.dtype)
int_float.dtype

Insérez la description de l'image ici

-Vous pouvez également utiliser le code de type du type de données pour représenter dtype

empty_unit32 = np.empty(8, dtype = 'u4')

Insérez la description de l'image ici

Opérations de tableau Numpy

  • Toute opération arithmétique entre des tableaux de taille égale appliquera l'opération au niveau élément

Créer un tableau à deux dimensions arr avec 2 lignes et 3 colonnes

arr = np.array([[1., 2., 3.], [4., 5., 6.]])
arr.shape

Insérez la description de l'image ici
Multipliez entre des tableaux de taille égale et les éléments sont multipliés en conséquence

arr * arr

Insérez la description de l'image ici

Soustraire entre des tableaux de taille égale et les éléments sont soustraits en conséquence

arr - arr

Insérez la description de l'image ici

Les opérations arithmétiques entre les tableaux et les scalaires propageront les opérations de valeurs scalaires à chaque élément

1 / arr

Insérez la description de l'image ici

La comparaison entre des tableaux de même taille produira un tableau booléen.
Créons un tableau bidimensionnel arr avec la même taille que arr

arr2 = np.array([[0., 4., 1.], [7., 2., 12.]])

Insérez la description de l'image ici

- Comparez arr et arr2

arr2 > arr

Insérez la description de l'image ici
Vous pouvez voir qu'un tableau booléen de la même taille est généré et que chaque élément du tableau est une comparaison de arr et arr2.

Indexation et découpage de base

Tranche de tableau à une dimension

  • En surface, le découpage de tableau unidimensionnel est similaire à la fonction de découpage de liste de Python

Créer un tableau d'entiers 0-9 arr

arr = np.arange(10)

Insérez la description de l'image ici

  • Prenez le sixième élément dans arr
arr[5]

Insérez la description de l'image ici

  • Prenez les 6ème à 8ème éléments dans arr, fermez avant de trancher puis ouvrez
arr[5: 8]

Insérez la description de l'image ici

  • Vous pouvez attribuer une valeur à la partie découpée et le tableau source est modifié sur place.
    Si j'attribue le 6e au 8e nombre d'arr avec '12'
arr[5: 8] = 12

Insérez la description de l'image ici
Comme vous pouvez le voir, le tableau arr est modifié in situ
- donc la différence la plus importante entre la tranche de tableau et la tranche de liste python est: la tranche de tableau est une vue des données d'origine, ce qui signifie que les données ne seront pas copiées, et toute modification sur la vue reflétera directement Sur la baie source

Par exemple, créez une tranche de arr_slice

arr_slice = arr[5: 8]

Insérez la description de l'image ici

  • Remarque: Si nous modifions la valeur de arr_slice, le changement sera reflété dans le tableau d'origine arr

Par exemple, attribuez le deuxième nombre d'arr_slice à «12345»

arr_slice[1] = 12345

Insérez la description de l'image ici
Comme vous pouvez le voir, les données du tableau source sont également modifiées

- Slice [:] signifie couper toutes les valeurs du tableau. Par
exemple, nous attribuons une valeur de «64» à chaque tuple dans arr_slice

arr_slice[:] = 64

Insérez la description de l'image ici
On peut voir que chaque élément de arr_slice se voit attribuer une valeur de '64'

  • La raison pour laquelle l'opération ci-dessus est différente du découpage natif de Python est que Numpy est conçu pour gérer le Big Data. Si les données sont copiées et copiées, cela exercera une pression considérable sur les performances et la mémoire.
  • Bien sûr, si vous souhaitez obtenir une copie de tranche du ndarray (tableau) au lieu de la vue, vous pouvez ajouter une méthode copy () après la tranche

Par exemple, nous voulons obtenir une copie de tranche des 6e à 8e éléments de arr et l'affecter avec '6'

arr3 = arr[5: 8].copy()
arr3[:] = 6

Insérez la description de l'image ici
Comme vous pouvez le voir, opérer sur la copie de la tranche de tableau n'affecte pas le tableau source

Tableau bidimensionnel

-Dans un tableau à deux dimensions, les éléments à chaque position d'index ne sont plus des scalaires comme des tableaux à une dimension, mais des tableaux à une dimension

Par exemple, créez un tableau à deux dimensions arr2d

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

Insérez la description de l'image ici
Prenez le troisième élément de arr2d

arr2d[2]

Insérez la description de l'image ici
Le résultat est un tableau unidimensionnel

- Si vous souhaitez obtenir un seul élément scalaire, vous pouvez accéder de manière récursive aux éléments de grande dimension. Par
exemple, je souhaite obtenir le troisième scalaire du premier tableau unidimensionnel d'un tableau à deux dimensions

arr2d[0, 2]

Insérez la description de l'image ici
L'idée de récursivité hiérarchique est utilisée ici
Insérez la description de l'image ici

Tableaux multidimensionnels

- Le principe des tableaux multidimensionnels est similaire à celui des tableaux bidimensionnels

Nous créons un tableau tridimensionnel 2 * 2 * 3 arr3d

arr3d = np.array([[[1, 2, 3], [4, 5, 6]],
                 [[7, 8, 9], [10, 11, 12]]])

Insérez la description de l'image ici

  • Si vous coupez arr3d et passez un paramètre scalaire, alors ce qui est renvoyé est un tableau bidimensionnel réduit d'une dimension

Par exemple, je veux obtenir le premier tableau bidimensionnel de arr3d

arr3d[0]

Insérez la description de l'image ici
Comme vous pouvez le voir, ce qui est renvoyé est un tableau bidimensionnel 2 * 3.
Au fur et à mesure que le paramètre de tranche augmente, la dimension du tableau renvoyé diminue jusqu'à ce qu'une valeur scalaire soit renvoyée.

- Les valeurs scalaires et les tableaux peuvent être affectés à arr3d [0]

Avant d'afficher l'affectation, nous créons d'abord une copie de arr3d [0] old_values ​​afin de restaurer le tableau source

old_values = arr3d[0].copy()

Insérez la description de l'image ici
Ensuite, nous affectons le premier tableau bidimensionnel de arr3d ce tableau tridimensionnel à 42

arr3d[0] = 42

Insérez la description de l'image ici
Comme vous pouvez le voir, chaque élément du premier tableau bidimensionnel obtenu par découpage se voit attribuer une valeur de 42

Nous utilisons la copie originale pour restaurer le tableau source

arr3d[0] = old_values
  • Notez que s'il n'y a pas de traitement spécial, la tranche renvoie une vue du tableau source, et la modification de la tranche affectera la valeur du tableau source

Index de tranche

- La syntaxe de découpage de ndarray est similaire
à celle des objets unidimensionnels tels que les listes Python. Regardez le tableau unidimensionnel précédent arr, nous prenons le deuxième au sixième éléments de arr

arr[1:6]

Insérez la description de l'image ici

Pour un tableau bidimensionnel 3 * 3 arr2d, la tranche sélectionne les éléments le long d'un axe, le 0e axe est la ligne et le premier axe est la colonne.
Nous sélectionnons les deux premières lignes du tableau bidimensionnel

arr2d[:2]

Insérez la description de l'image ici
On voit ici que arr2d [: 2] est une manière simple d'écrire arr2d [0: 2], ce qui signifie que les deux premières lignes de arr2d sont sélectionnées (front fermé puis ouvert)


-Il est également possible de transmettre plusieurs tranches à la fois. Par exemple, nous devons sélectionner toutes les données après la deuxième colonne dans les deux premières lignes du tableau arr2d

arr2d[ :2, 1: ]

Insérez la description de l'image ici

  • En mélangeant des index entiers et des tranches, vous pouvez obtenir des tranches de faible dimension.
    Par exemple, je souhaite sélectionner les deux premières colonnes de la deuxième ligne.
arr2d[1,  :2]

Insérez la description de l'image ici
Nous obtenons un tableau unidimensionnel de dimensions inférieures

  • Remarque: un simple deux-points indique que tout l'axe est sélectionné

Insérez la description de l'image ici

  • Bien sûr, l'opération d'affectation de la tranche sera également étendue à l'ensemble de la sélection, car la tranche est la vue après le traitement du tableau source, et le tableau source sera affecté par le changement de la tranche

Index booléen

- Supposons que nous ayons un tableau de données pour stocker les données et un tableau de noms pour stocker les noms (contenant des doublons)

names = np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'])

Insérez la description de l'image ici
Nous utilisons la fonction randn dans numpy.random pour générer une distribution normale standard avec 7 lignes et 4 colonnes de données de tableau aléatoire

data = np.random.randn(7, 4)

Insérez la description de l'image ici

  • Supposons que chaque nom du tableau names correspond à chaque ligne de la valeur de données.
    Nous voulons sélectionner toutes les lignes correspondant au nom de "Bob"

- Voyons quels noms dans les noms sont "Bob"

names == 'Bob'

Insérez la description de l'image ici

  • Ici, vous devez utiliser le signe '==' au lieu du signe '=', sinon vous attribuerez 'Bob' à chaque élément dans les noms
  • On peut voir qu'un tableau booléen unidimensionnel est généré et que l'élément avec l'élément 'Bob' renvoie True, sinon c'est False

-Ensuite, nous passons le tableau booléen retourné en tant qu'index dans les données

data[names == 'Bob']

Insérez la description de l'image ici
Il n'est pas difficile de trouver que les lignes correspondant à 'Bob' dans les données ont été sélectionnées

  • Remarque: La longueur du tableau booléen doit être la même que la longueur de l'axe indexé. Si la longueur est incohérente, une erreur se produit.

-Bien sûr, vous pouvez également indexer plus d'axes, comme l'ajout d'un index de colonne, je veux obtenir les données après la deuxième colonne de la ligne correspondant à 'Bob' dans les données

data[names == 'Bob', 2: ]

Insérez la description de l'image ici

- Si vous souhaitez sélectionner une valeur autre que 'Bob', vous pouvez utiliser le signe d'inégalité '! =' Ou '~' pour annuler

data[names != 'Bob']

Insérez la description de l'image ici
En conséquence, les lignes restantes à l'exception de la ligne correspondant à Bob sont sélectionnées

- Nous utilisons souvent l'opérateur '~' pour effectuer une inversion conditionnelle. Par
exemple, nous passons d'abord le tableau booléen de 'Bob' à un objet cond

cond = names == 'Bob'

Insérez la description de l'image ici

Utilisez ensuite l'opérateur ~ pour inverser l'objet dans l'index des données

data[~cond]

Insérez la description de l'image ici

En conséquence, les lignes restantes à l'exception de la ligne correspondant à Bob sont également sélectionnées

-Si nous voulons ajouter des conditions de jugement, nous pouvons utiliser & (et), | (ou), et d'autres opérateurs arithmétiques booléens (vous ne pouvez pas utiliser les mots-clés et et ou en Python). Par
exemple, je veux sélectionner'Bob en même temps Les lignes correspondant aux deux noms de 'et' Will 'dans les données

mask = (names == 'Bob') | (names == 'Will')

Insérez la description de l'image ici

data[mask]

Insérez la description de l'image ici
En conséquence, les lignes correspondant à Bob et Will sont sélectionnées

  • Remarque: la sélection de données dans le tableau par index booléen créera toujours une vue des données

- Nous définissons souvent des valeurs via des tableaux booléens. Par
exemple, définissez toutes les valeurs négatives des données sur 0

data[data < 0] = 0

Insérez la description de l'image ici

-Vous pouvez également définir la valeur d'une ligne ou d'une colonne entière via un tableau booléen unidimensionnel

data[names != 'Joe'] = 7

Insérez la description de l'image ici
Comme vous pouvez le voir, les données correspondant aux éléments de la ligne dont le nom est «Joe» reçoivent toutes la valeur 7

Index de fantaisie

  • L'indexation fantaisie fait référence à: l'indexation avec des tableaux d'entiers

- Supposons qu'il y ait un tableau 8 * 4 arr

arr = np.empty((8, 4))

Insérez la description de l'image ici
Ce tableau sert uniquement à créer de l'espace et contient des valeurs de garbage non initialisées

-Maintenant, nous remplissons ce tableau avec une boucle for

for i in range(8):
    arr[i] = i

Insérez la description de l'image ici

Nous pouvons passer une liste d'entiers dans un ordre spécifié ou sélectionner un sous-ensemble du tableau

arr[[4, 3, 0, 6]]

Insérez la description de l'image ici

Transposition de tableau et conversion d'axe

  • La transposition est similaire au remodelage de tableau
  • Transpose n'effectue aucune opération de copie et renvoie une vue des données source
  • Le tableau a un attribut spécial T pour la transposition

Créer un tableau à deux dimensions avec 3 lignes et 5 colonnes

arr = np.arange(15).reshape((3, 5))

Insérez la description de l'image ici
Transposer avec l'attribut T

arr.T

Insérez la description de l'image ici

  • Lors de l'exécution de calculs matriciels (comme le calcul du produit interne d'une matrice), la transposition est souvent nécessaire
  • Pour calculer le produit interne de la matrice, nous pouvons utiliser la fonction dot dans numpy
  • En fait, dot () renvoie le produit scalaire de deux tableaux

- Nous créons un tableau à deux dimensions et essayons de calculer le produit interne de celui-ci et son tableau transposé

arr = np.random.randn(6, 3)

Insérez la description de l'image ici
Calculer le produit intérieur

np.dot(arr, arr.T)

Insérez la description de l'image ici

-Comme pour la transposition d'un tableau à trois chiffres, un concept doit être introduit ici: la transposition nécessite un tuple composé de nombres d'axes.
Par exemple, créez un tableau tridimensionnel 2 * 2 * 4

arr = np.arange(16).reshape((2, 2, 4))

Insérez la description de l'image ici

  • Numérotez les trois axes du tableau tridimensionnel: 0, 1, 2 J'imagine la longueur (0), la largeur (1) et la hauteur (2) d'un cuboïde
  • Lorsqu'elle est transposée, elle équivaut à la rotation horizontale du cuboïde de 90 degrés, et les valeurs de longueur et de largeur sont subjectivement comprises comme un échange: la longueur d'origine devient largeur et la largeur devient longueur, donc la longueur, la largeur et la hauteur du cuboïde transposé correspondent à Les numéros d'axe du cuboïde d'origine sont 1 (largeur), 0 (longueur), 2 (hauteur)
arr.transpose((1, 0, 2))

Insérez la description de l'image ici

- Parlons de la fonction de transposition dans numpy. Les paramètres de transposition peuvent être compris comme les étiquettes d'axe du tableau

  • Pour les tableaux à une dimension, numpy.transpose () ne fonctionne pas car il n'y a qu'un seul axe
  • L'opération de transposition sur le tableau bidimensionnel est l'opération de transposition sur le tableau d'origine, et l'étiquette d'axe est convertie de (0, 1) à (1, 0)
  • Pour un tableau en trois dimensions, transposer transformera deux des trois axes (voir comment vous définissez cette transposition)

-Il existe également une méthode swapaxes dans ndarray, qui permet d'échanger des axes.
Par exemple, je souhaite échanger les deuxième et troisième axes d'un tableau en trois dimensions

arr.swapaxes(1, 2)

Insérez la description de l'image ici

  • La méthode swapaxes est en fait une manière différente de transposer, ce qui est très pratique
  • Il convient également de noter que la méthode swapaxes n'effectue pas d'opération de copie et renvoie une vue des données source

Je suppose que tu aimes

Origine blog.csdn.net/Baby1601tree/article/details/96840882
conseillé
Classement