Cet article est l'article du 14e jour du Calendrier de l'Avent 2019 NCC.
Lors de l'écriture d'un programme, un tableau est important.
Cependant, il existe un ** problème de trop grand nombre de type tableau Python **.
Même avec les fonctionnalités Python standard
list
,dict
,set
,tuple
il y a.
De plus, lorsque vous commencez à utiliser une bibliothèque telle que numpy
, vous en trouverez d'autres similaires.
Donc, cette fois, je vais les expliquer afin qu'ils puissent être utilisés correctement dans les quatre points suivants.
Puisqu'il s'agit d'un article pour ** une utilisation correcte **, je ne parlerai pas d'une utilisation détaillée. Aussi, je vais l'écrire en supposant que je sais en quelque sorte ce qu'est le tableau. Je vais expliquer en utilisant des mots simples autant que possible.
list
dict
set
tuple
numpy
numpy.array
/numpy.ndarray
numpy.matrix
list
La liste
est simplement ** la plus basique **.
C'est la même chose qu'un tableau général dans d'autres langages, et en Python, on l'appelle généralement une "liste".
Le symbole est «[]», donc s'il est entouré de ceci et qu'il y en a beaucoup à l'intérieur, considérez-le comme une liste.
En Python, il peut y avoir plusieurs types dans la liste. Vous pouvez également saisir autant de valeurs identiques que vous le souhaitez. De plus, il a la fonction d'un tableau, qui est généralement appelé.
Plus tard, quand j'expliquerai le «dict» suivant, je pense que je le compare souvent avec «list», donc je pense que ce serait bien si vous pouviez comprendre la nature de «list» tout en le regardant. (Parce que c'est un gars normal, il n'y a pas beaucoup d'explications.)
--Facile à manier
――Vous pouvez l'implémenter en utilisant simplement list
sans penser aux choses difficiles.
――Il devient difficile à comprendre à mesure que le nombre de dimensions augmente
--Je ne peux pas voir la longueur de chaque tableau à la fois (il n'y a pas de shape
dans numpy
)
L'origine, bonne ou mauvaise.
Même avec «numpy» ou «pandas», il est également difficile de le convertir en «liste» et de l'utiliser ensuite.
C'est aussi «liste» lorsque la longueur est indéfinie dans une dimension, ou lorsque l'ordre a un sens mais que le nombre n'a pas de sens.
Cependant, il n'est pas très approprié pour le multi-dimensionnel.
(Ne concevez pas trop de dimensions en premier lieu)
Il est rafraîchissant de combiner avec numpy
pour les valeurs numériques et dict
pour les données complexes.
dict
C'est ce qu'on appelle le ** tableau associatif **.
En Python, c'est un type de dictionnaire ou dictionary
( dict
pour faire court).
Le symbole est «{}», et chaque élément est connecté par «:» comme «{key: value}».
Je ne vais pas expliquer en détail avec des exemples. Veuillez vous référer à la référence etc.
Je pense que le type clé
de dict
pourrait être n'importe quoi, mais il est plus facile à comprendre si vous utilisez une chaîne ou un entier.
De plus, lorsque le contenu est plein, il est plus facile de voir si vous commencez une nouvelle ligne avec key
. Aussi, alignons les retraits. (Comme json)
Voici un exemple.
ncc = { 'name': 'ncc',
'full name': 'nakano computer club',
'estimate': 2015,
'web site': 'https://meiji-ncc.tech/'
}
--Facile à comprendre --Facile à utiliser avec json --Une chaîne de caractères peut être utilisée comme référence
--Si vous n'y êtes pas habitué, cela provoquera une erreur ――Il est difficile de sortir quand ça devient profond
dic ['first'] ['second'] ['third']
Lorsque la valeur et son nom sont importants, c'est à vous de décider! Même avec des nombres, «dict» est plus facile à gérer lorsque les intervalles sont irréguliers. De plus, avant de convertir en «DataFrame» de «pandas» (bibliothèque), il est souvent résumé une fois avec «dict». Parce que c'est plus facile à manipuler. Je pense que vous devriez l'utiliser dans l'image qui relie «clé» et «valeur». Il est pratique de traiter avec json. .. (Facile à lire et à écrire avec la bibliothèque json)
set
L'expression simple pour set
est ** no cover list
**.
Le symbole est «{}», qui est le même que «dict», mais n'utilise pas «:».
Comme pour list
, les valeurs sont organisées par,
.
Donc, s'il est entouré de {}
et qu'il y a beaucoup de ,
, c'est set
.
À proprement parler, il représente un ensemble.
Vous pouvez donc également effectuer des opérations de réglage. (Je n'y toucherai pas ici)
list
peut avoir la même valeur que [0, 1, 2, 1, 0]
, mais pas avec set
.
La conversion de la «liste» ci-dessus en «ensemble» donne «{0, 1, 2}».
C'est la même chose sauf pour les nombres.
Pour le mettre dans l'autre sens, si vous voulez éliminer le couvercle, vous pouvez le convertir en set
.
Dans ce cas, si vous voulez le traiter à nouveau comme une liste, vous devez le convertir du haut de set
à list
et le renvoyer dans la liste.
J'écrirai un exemple.
list_duplicate = [0, 1, 2, 2, 1, 0, 3]
list_non_duplicate = list(set(list_duplicate))
print(list_non_duplicate) # out: [0, 1, 2, 3]
--Peut être mis sans couverture --Une opération définie est possible
liste
, la couverture sera retirée et elle sera emballée avant cela)
--Le symbole est difficile à comprendre avec dict
(légèrement)Il est rarement utilisé dans set
depuis le début.
Il est souvent converti à partir de la liste lorsque vous souhaitez supprimer la couverture ou lorsque vous souhaitez extraire les parties communes des éléments de plusieurs listes.
Par conséquent, vous devez penser qu'il est utilisé lorsque vous adoptez une approche collective au moment de la mise en œuvre.
tuple
Doit-on appeler «tuple» ** une petite liste «raide» **? Il y a une petite habitude. Le symbole est «()».
C'est fondamentalement comme «list», mais c'est différent. En gros, ** je ne peux pas jouer avec ce que j'ai fait **. Vous pouvez ajouter un autre taple après. (1) Vous pouvez également changer le taple lui-même en autre chose. (2) De plus, les éléments ne peuvent pas être réécrits. C'est un peu difficile, alors je vais vous montrer un exemple.
t = (0, 1, 2)
#Ajouter taple derrière
t += (3, 4) # OK(1)
#Réécrire le taple lui-même
t = (0, 1, 2) # OK(2)
#Réécrire des éléments
t[0] = 1 # Error
Il n'y a pas de méthodes pour attribuer ou supprimer.
De plus, comme les éléments ne peuvent pas être réécrits, l'ordre spécifique ne peut pas être modifié.
Pour ce faire, vous devez le convertir en liste
.
--Une fois fait, il ne peut pas être réécrit
Puisque Python n'a pas de type qui représente une constante (const en js), vous pouvez le faire avec tuple
d'une manière pseudo.
Cependant, je ne l'utilise pas beaucoup car je ne peux rien faire de dynamique.
La valeur de retour de la méthode de la bibliothèque peut être tuple
, donc je l'utilise simplement ici.
Ensuite, nous allons passer à l'explication du système de tableaux dans la bibliothèque Python numpy
.
Avant cela, j'expliquerai brièvement le "numpy".
numpy
est une bibliothèque qui peut effectuer des opérations matricielles effectuées par algèbre linéaire.
Addition et soustraction d'éléments de tableau.
Il peut être utilisé lors de la multiplication du tableau entier par une valeur numérique.
Vous pouvez faire des choses plus avancées, mais ce n'est pas grave si vous pensez que le ** calcul numérique des tableaux sera pratique **.
numpy.array
/numpy.ndarray
Le tableau unidimensionnel de «numpy» est «numpy.array».
Multidimensionnel est numpy.ndarray
.
Le traitement ne change pas beaucoup qu'il soit unidimensionnel ou multidimensionnel.
Puisqu'il s'agit d'une bibliothèque, elle ne peut pas être représentée par un symbole spécifique.
Il sera converti si vous entourez list
etc. dans numpy.array ()
.
numpy.array ()
même dans plusieurs dimensions, pas dans numpy.ndarray
.
La différence avec list
est que ** vous pouvez effectuer des opérations entre des tableaux **.
Cependant, vous ne pouvez pas créer un numpy.array
vide.
Convertissons à partir de list
.import numpy as np
#Définir une liste régulière
list_num0 = [0, 1, 2, 3, 4]
#Convertir en tableau numpy
np_num0 = np.array(list_num0)
print(np_num0) # out: [0 1 2 3 4]
#Générer directement un tableau numpy
np_num1 = np.array([5, 6, 7, 8, 9])
print(np_num1) # out: [5 6 7 8 9]
#Convertir un tableau numpy en liste
list_num1 = list(np_num1)
print(list_num1) # out: [5, 6, 7, 8, 9]
#Double chaque liste et tableau numpy
list_num0_twice = 2*list_num0
print(list_num0_twice) # out: [0, 1, 2, 3, 4, 0, 1, 2, 3, 4]
np_num0_twice = 2*np_num0
print(np_num0_twice) # out: [0 2 4 6 8]
# list,Essayez d'ajouter chacun avec un tableau numpy
list_num_add = list_num0 + list_num1
print(list_num_add) # out: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
np_num_add = np_num0 + np_num1
print(np_num_add) # out: [ 5 7 9 11 13]
De cette façon, vous pouvez facilement effectuer des opérations dans les éléments d'un tableau avec numpy.array
.
――C'est difficile à gérer à moins de s'y habituer
Si vous voulez faire des choses mathématiques, c'est vraiment "numpy".
Cela va bien avec une bibliothèque appelée scipy
qui peut effectuer des calculs appliqués (comme l'intégration).
Si vous vous habituez à faire beaucoup de calculs, vous devriez l'essayer.
Il est facile à utiliser si vous comprenez la différence avec «list».
numpy.matrix
--Je ne l'ai jamais utilisé
―― J'ai vérifié diverses choses, mais il semble que vous devriez utiliser ndarray
--Il semble pratique lors de l'utilisation d'une matrice m × n
Voici un résumé de chacun en un mot.
list
: Basique
dict
: lien fort entre le nom et la valeur
set
: liste non couverte
tuple: liste non réinscriptible
numpy.array
/ numpy.ndarray
: Spécialisation de calcul numérique list
Je ne l'utilise pas car je suis confondu avec numpy.matrix
: numpy.ndarray
Voici un diagramme montrant en quelque sorte le flux lors du choix de celui à utiliser personnellement.
En fait, c'est un peu plus compliqué, mais jusqu'à ce que vous vous y habituiez, vous devriez penser comme ça.
Puisque tuple
n'est pas utilisé, il n'est pas inclus.
(En fait, je n'utilise pas trop set
)
Cette fois, j'ai comparé les types de tableaux Python. Il y en a plus si vous incluez les détails et les bibliothèques. Cependant, puisque ce domaine est la base, si vous pouvez comprendre ce domaine, je pense que d'autres compréhensions s'amélioreront.
Recommended Posts