Diverses méthodes pour extraire des colonnes d'un tableau à deux dimensions.
import
python
import numpy as np
Tout d'abord, générez un tableau 5x4 de manière appropriée
python
a = np.arange(5*4).reshape([5, 4])
print(a)
# [[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]
# [12 13 14 15]
# [16 17 18 19]]
python
#2ème rangée uniquement
b = a[:, 2]
print(b)
# [ 2 6 10 14 18]
Si ʻa [ligne, colonne] est spécifié, la ligne est spécifiée dans la partie
row et la colonne est spécifiée dans la partie
column. Puisque nous voulons récupérer la colonne cette fois, la partie
row est toujours
:. En décrivant uniquement
: , cela signifie qu'aucune ligne particulière n'est spécifiée. En d'autres termes, ʻa [:, 2]
Signifie, "De toutes les lignes, veuillez uniquement l'élément avec l'index 2."
Extrayez plusieurs colonnes consécutives, telles que les 1ère, 2ème et 0ème à 2ème colonnes.
python
# 1,2e rangée
b = a[:, 1:3]
print(b)
# [[ 1 2]
# [ 5 6]
# [ 9 10]
# [13 14]
# [17 18]]
Puisque «1: 3» signifie 1 ou plus et moins de 3, les 1ère et 2ème colonnes peuvent être supprimées. Si vous spécifiez comme «1:» ou «: 3», vous pouvez obtenir toutes les colonnes au-dessus de la première colonne et en dessous de la troisième colonne.
python
#1ère rangée~
b = a[:, 1:]
print(b)
# [[ 1 2 3]
# [ 5 6 7]
# [ 9 10 11]
# [13 14 15]
# [17 18 19]]
# 0~2e rangée
b = a[:, :3]
print(b)
# [[ 0 1 2]
# [ 4 5 6]
# [ 8 9 10]
# [12 13 14]
# [16 17 18]]
python
#Générer un tableau 4x8
a = np.arange(4*8).reshape([4, 8])
# [[ 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 27 28 29 30 31]]
#Colonne paire
b = a[:, ::2]
print(b)
# [[ 0 2 4 6]
# [ 8 10 12 14]
# [16 18 20 22]
# [24 26 28 30]]
#Colonne impaire
b = a[:, 1::2]
print(b)
# [[ 1 3 5 7]
# [ 9 11 13 15]
# [17 19 21 23]
# [25 27 29 31]]
De cette manière, comme il suit fondamentalement la méthode de fonctionnement de la liste, il peut être acquis par multiples ou dans l'ordre inverse.
python
#Rangées multiples de 3 à partir de l'arrière
b = a[:, ::-3]
print(b)
# [[ 7 4 1]
# [15 12 9]
# [23 20 17]
# [31 28 25]]
#Passer une ligne de la première ligne à moins de la septième ligne
b = a[:, 1:7:2]
print(b)
# [[ 1 3 5]
# [ 9 11 13]
# [17 19 21]
# [25 27 29]]
Personnellement, le sujet principal est d'ici. Il y a des moments où vous souhaitez récupérer des colonnes de manière irrégulière, telles que les colonnes 1, 5 et 6. Cela demande beaucoup de travail, mais cela peut être réalisé en préparant un filtre de la même longueur que le nombre de colonnes.
python
#Index 1, 5,La valeur de 6 est True,Autre que cela, une liste de Fausse longueur 8
f = [False, True, False, False, False, True, True, False]
b = a[:, f]
print(b)
# [[ 1 5 6]
# [ 9 13 14]
# [17 21 22]
# [25 29 30]]
#Générer une matrice zéro 1x8 de type booléen,Un modèle qui modifie uniquement la valeur d'index de la colonne souhaitée en True
f = np.zeros(8, dtype=bool)
columns = [1, 5, 6]
f[columns] = True
b = a[:, f]
print(b)
# [[ 1 5 6]
# [ 9 13 14]
# [17 21 22]
# [25 29 30]]
#Si vous voulez obtenir d'autres colonnes que les colonnes spécifiées, générez un tableau tout vrai avec des uns,Remplacez uniquement les colonnes inutiles par False
f = np.ones(8, dtype=bool)
columns = [1, 5, 6]
f[columns] = False
b = a[:, f]
print(b)
# [[ 0 2 3 4 7]
# [ 8 10 11 12 15]
# [16 18 19 20 23]
# [24 26 27 28 31]]
Je pense que la plupart des tableaux gérés par ~~ numpy ont un grand nombre de colonnes, donc je pense que la deuxième méthode sera la principale. L'exemple utilise «np.zeros», mais dans certaines situations, il peut être plus facile de créer un tableau de «np.ones» avec tous les éléments «True», puis de changer uniquement les colonnes indésirables en «False». . ~~
np.zeros
, donc je vais la montrer ci-dessous.python
#Générer un tableau 4x8
a = np.arange(4*8).reshape([4, 8])
# [[ 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 27 28 29 30 31]]
# 1, 5,Sortez 6 rangs
b = a[:, [1, 5, 6]]
print(b)
# [[ 1 5 6]
# [ 9 13 14]
# [17 21 22]
# [25 29 30]]
Je pensais que ce serait difficile à comprendre même si l'histoire était trop développée, donc cette fois je me suis concentré uniquement sur les colonnes, mais il est également possible d'extraire une colonne spécifique d'une ligne spécifique en spécifiant une ligne ainsi qu'une colonne. En appliquant ces méthodes, vous pouvez extraire les éléments souhaités.
Je pense que la méthode de création d'une matrice zéro et d'extraction des colonnes, que j'ai expliquée à la toute fin, était assez propre pour moi, mais je pense qu'il peut y avoir d'autres méthodes plus faciles ~~.
@Nkay a commenté un moyen plus intelligent de récupérer plusieurs colonnes, je l'ai donc ajouté. (4 juillet 2020)
Recommended Posts