Maison > développement back-end > Tutoriel Python > Compréhension approfondie du didacticiel concis NumPy --- Array 3 (combinaison)

Compréhension approfondie du didacticiel concis NumPy --- Array 3 (combinaison)

高洛峰
Libérer: 2017-02-23 16:55:18
original
1264 Les gens l'ont consulté

Les deux premiers articles ont donné une introduction de base aux tableaux NumPy. Cet article fournit une discussion plus approfondie des tableaux NumPy. Tout d’abord, nous introduisons les tableaux de types personnalisés, puis la combinaison de tableaux et enfin les problèmes de copie de tableaux.

Tableau de structures personnalisé

Les types de structures comme le langage C peuvent également être définis via NumPy. La méthode de définition d'une structure dans NumPy est la suivante :

Définissez le nom du type de structure ; définissez le nom du champ et indiquez le type de données du champ.

student= dtype({'names':['name', 'age', 'weight'], 'formats':['S32', 'i','f']}, align = True)
Copier après la connexion

Ici, l'étudiant est le nom du type de structure personnalisé, créé à l'aide de la fonction dtype, dans le premier paramètre, 'names' et Les « formats » ne peuvent pas être modifiés. Noms répertorie les noms de champs dans la structure et formats répertorie les types de données des champs correspondants. S32 représente une chaîne de 32 octets, i représente un entier de 32 bits et f représente un nombre à virgule flottante de 32 bits. Lorsque le dernier paramètre est True, cela indique qu'un alignement de la mémoire est requis.

Le codage de caractères NumPy est utilisé dans le champ pour représenter le type de données. Consultez le tableau ci-dessous pour des types de données plus détaillés.


数据类型字符编码
整数i
无符号整数u
单精度浮点数f
双精度浮点数d
布尔值b
复数D
字符串S
UnicodeU
VoidV

Après avoir défini le type de structure, vous pouvez définir un tableau avec ce type comme éléments :

a= array([(“Zhang”, 32, 65.5), (“Wang”, 24, 55.2)], dtype =student)
Copier après la connexion

En plus de lister les données des champs correspondants dans chaque élément, vous devez également spécifier le type de données correspondant dans le dernier paramètre de la fonction tableau.

Combiner des fonctions

Voici les différentes manières de combiner des fonctions. Créez d'abord deux tableaux :

>>> a = arange(9).reshape(3,3) 
>>> a 
array([[0, 1, 2], 
   [3, 4, 5], 
   [6, 7, 8]]) 
>>> b = 2 * a 
>>> b 
array([[ 0, 2, 4], 
  [ 6, 8, 10], 
  [12, 14, 16]])
Copier après la connexion

Combinaison horizontale

>>> hstack((a, b)) 
array([[ 0, 1, 2, 0, 2, 4], 
  [ 3, 4, 5, 6, 8, 10], 
  [ 6, 7, 8, 12, 14, 16]])
Copier après la connexion

Cet effet peut également être obtenu grâce à la fonction concaténer et préciser l'axe correspondant :

>>> concatenate((a, b), axis=1) 
array([[ 0, 1, 2, 0, 2, 4], 
  [ 3, 4, 5, 6, 8, 10], 
  [ 6, 7, 8, 12, 14, 16]])
Copier après la connexion

Combinaison verticale

>>> vstack((a, b)) 
array([[ 0, 1, 2], 
  [ 3, 4, 5], 
  [ 6, 7, 8], 
  [ 0, 2, 4], 
  [ 6, 8, 10], 
  [12, 14, 16]])
Copier après la connexion

De même, cela peut être obtenu via la fonction de concaténation et en spécifiant l'effet de l'axe correspondant.

>>> concatenate((a, b), axis=0) 
array([[ 0, 1, 2], 
  [ 3, 4, 5], 
  [ 6, 7, 8], 
  [ 0, 2, 4], 
  [ 6, 8, 10], 
  [12, 14, 16]])
Copier après la connexion

Combinaison de profondeur

De plus, il existe des fonctions de combinaison de profondeur dstack . Comme son nom l'indique, il se combine sur le troisième axe du tableau (c'est-à-dire la profondeur). Comme suit :

>>> dstack((a, b)) 
array([[[ 0, 0], 
  [ 1, 2], 
  [ 2, 4]], 
 
  [[ 3, 6], 
  [ 4, 8], 
  [ 5, 10]], 
 
  [[ 6, 12], 
  [ 7, 14], 
  [ 8, 16]]])
Copier après la connexion

Regardez attentivement et constatez que les éléments correspondants sont combinés dans une nouvelle liste, qui est utilisée comme élément du nouveau tableau.

Combinaison de lignes

La combinaison de lignes combine plusieurs tableaux unidimensionnels comme chaque ligne d'un nouveau tableau :

>>> one = arange(2) 
>>> one 
array([0, 1]) 
>>> two = one + 2 
>>> two 
array([2, 3]) 
>>> row_stack((one, two)) 
array([[0, 1], 
  [2, 3]])
Copier après la connexion

Pour les tableaux 2D, fonctionne comme une combinaison verticale.

Combinaison de colonnes

L'effet de la combinaison de colonnes doit être clair. Comme suit :

>>> column_stack((oned, twiceoned)) 
array([[0, 2], 
  [1, 3]])
Copier après la connexion

Pour les tableaux à 2 dimensions, cela fonctionne comme une combinaison horizontale.

Split array

Dans NumPy, les fonctions de fractionnement des tableaux incluent hsplit, vsplit, dsplit et split. Vous pouvez diviser le tableau en sous-tableaux de même taille ou spécifier l'emplacement où le tableau d'origine est divisé.

Diviser horizontalement

>>> a = arange(9).reshape(3,3) 
>>> a 
array([[0, 1, 2], 
  [3, 4, 5], 
  [6, 7, 8]]) 
>>> hsplit(a, 3) 
[array([[0], 
  [3], 
  [6]]), 
 array([[1], 
  [4], 
  [7]]), 
 array([[2], 
  [5], 
  [8]])]
Copier après la connexion

Appelez également la fonction de division et spécifiez l'axe comme 1 à obtenez ceci L'effet :

split(a, 3, axis=1)
Copier après la connexion

La division verticale

La division verticale est en cours l'axe vertical coupe le groupe :

>>> vsplit(a, 3) 
>>> [array([[0, 1, 2]]), array([[3, 4, 5]]), array([[6, 7, 8]])]
Copier après la connexion

De même, vous pouvez également utiliser la fonction solit et spécifier l'axe comme 1 pour obtenir un tel un effet :

>>> split(a, 3, axis=0)
Copier après la connexion

Segmentation orientée profondeur

La fonction dsplit utilise Méthode de segmentation orientée profondeur :

>>> c = arange(27).reshape(3, 3, 3) 
>>> c 
array([[[ 0, 1, 2], 
  [ 3, 4, 5], 
  [ 6, 7, 8]], 
 
  [[ 9, 10, 11], 
  [12, 13, 14], 
  [15, 16, 17]], 
 
  [[18, 19, 20], 
  [21, 22, 23], 
  [24, 25, 26]]]) 
>>> dsplit(c, 3) 
[array([[[ 0], 
  [ 3], 
  [ 6]], 
 
  [[ 9], 
  [12], 
  [15]], 
 
  [[18], 
  [21], 
  [24]]]), 
 array([[[ 1], 
  [ 4], 
  [ 7]], 
 
  [[10], 
  [13], 
  [16]], 
 
  [[19], 
  [22], 
  [25]]]), 
 array([[[ 2], 
  [ 5], 
  [ 8]], 
 
  [[11], 
  [14], 
  [17]], 
 
  [[20], 
  [23], 
  [26]]])]
Copier après la connexion

Copie et miroir (affichage)

Lors du calcul de la somme Lorsque vous travaillez avec des tableaux, leurs données sont parfois copiées dans le nouveau tableau et parfois non. C’est souvent une source de confusion pour les débutants. Il existe trois cas pour cela :

Aucune copie du tout

Assignation simple sans copier les objets du tableau ou leurs données.

>>> a = arange(12) 
>>> b = a  #不创建新对象 
>>> b is a   # a和b是同一个数组对象的两个名字 
True 
>>> b.shape = 3,4 #也改变了a的形状 
>>> a.shape 
(3, 4) 
    Python 传递不定对象作为参考4,所以函数调用不拷贝数组。
 >>> def f(x): 
...  print id(x) 
... 
>>> id(a)  #id是一个对象的唯一标识 
148293216 
>>> f(a) 
148293216
Copier après la connexion

Affichage et copie superficielle

différents objets de tableau Partager les mêmes données . La méthode view crée un nouvel objet tableau pointant vers les mêmes données.

>>> c = a.view() 
>>> c is a 
False 
>>> c.base is a  #c是a持有数据的镜像 
True 
>>> c.flags.owndata 
False 
>>> 
>>> c.shape = 2,6 # a的形状没变 
>>> a.shape 
(3, 4) 
>>> c[0,4] = 1234  #a的数据改变了 
>>> a 
array([[ 0, 1, 2, 3], 
  [1234, 5, 6, 7], 
  [ 8, 9, 10, 11]])
Copier après la connexion

Un tableau découpé en renvoie une vue :

>>> s = a[ : , 1:3]  # 获得每一行1,2处的元素 
>>> s[:] = 10   # s[:] 是s的镜像。注意区别s=10 and s[:]=10 
>>> a 
array([[ 0, 10, 10, 3], 
  [1234, 10, 10, 7], 
  [ 8, 10, 10, 11]])
Copier après la connexion

Copie approfondie

Cette méthode de copie copie complètement le tableau et ses données.

 >>> d = a.copy()  #创建了一个含有新数据的新数组对象 
>>> d is a 
False 
>>> d.base is a  #d和a现在没有任何关系 
False 
>>> d[0,0] = 9999 
>>> a 
array([[ 0, 10, 10, 3], 
  [1234, 10, 10, 7], 
  [ 8, 10, 10, 11]])
Copier après la connexion

Ce qui précède est l'intégralité du contenu de cet article. J'espère qu'il sera utile à l'apprentissage de chacun. J'espère également que tout le monde le fera. prend en charge le site Web PHP chinois.

Pour une compréhension plus approfondie du didacticiel concis de NumPy --- Articles liés au tableau 3 (combinaison), veuillez faire attention au site Web PHP chinois !


Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal