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)
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 |
Unicode | U |
Void | V |
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)
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]])
Combinaison horizontale
>>> hstack((a, b)) array([[ 0, 1, 2, 0, 2, 4], [ 3, 4, 5, 6, 8, 10], [ 6, 7, 8, 12, 14, 16]])
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]])
Combinaison verticale
>>> vstack((a, b)) array([[ 0, 1, 2], [ 3, 4, 5], [ 6, 7, 8], [ 0, 2, 4], [ 6, 8, 10], [12, 14, 16]])
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]])
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]]])
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]])
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]])
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]])]
Appelez également la fonction de division et spécifiez l'axe comme 1 à obtenez ceci L'effet :
split(a, 3, axis=1)
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]])]
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)
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]]])]
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
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]])
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]])
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]])
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 !