Verschiedene Methoden zum Extrahieren von Spalten eines zweidimensionalen Arrays.
import
python
import numpy as np
Generieren Sie zunächst ein geeignetes 5x4-Array
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
#Nur 2. Reihe
b = a[:, 2]
print(b)
# [ 2 6 10 14 18]
Wenn "a [Zeile, Spalte]" angegeben ist, wird die Zeile im Teil "Zeile" und die Spalte im Teil "Spalte" angegeben. Da wir diesmal die Spalte abrufen möchten, ist der Teil "Zeile" immer ":". Wenn Sie nur ":" schreiben, bedeutet dies, dass keine bestimmte Zeile angegeben ist. Mit anderen Worten, "a [:, 2]" Bedeutet: "Aus allen Zeilen bitte nur das Element mit Index 2."
Extrahieren Sie mehrere aufeinanderfolgende Spalten, z. B. die 1., 2. und 0. bis 2. Spalte.
python
# 1,2. Reihe
b = a[:, 1:3]
print(b)
# [[ 1 2]
# [ 5 6]
# [ 9 10]
# [13 14]
# [17 18]]
Da "1: 3" 1 oder mehr und weniger als 3 bedeutet, können die 1. und 2. Spalte extrahiert werden. Wenn Sie "1:" oder ": 3" angeben, können Sie alle Spalten über der ersten Spalte und unter der dritten Spalte abrufen.
python
#1. Reihe~
b = a[:, 1:]
print(b)
# [[ 1 2 3]
# [ 5 6 7]
# [ 9 10 11]
# [13 14 15]
# [17 18 19]]
# 0~2. Reihe
b = a[:, :3]
print(b)
# [[ 0 1 2]
# [ 4 5 6]
# [ 8 9 10]
# [12 13 14]
# [16 17 18]]
python
#Generieren Sie ein 4x8-Array
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]]
#Gerade Spalte
b = a[:, ::2]
print(b)
# [[ 0 2 4 6]
# [ 8 10 12 14]
# [16 18 20 22]
# [24 26 28 30]]
#Ungerade Spalte
b = a[:, 1::2]
print(b)
# [[ 1 3 5 7]
# [ 9 11 13 15]
# [17 19 21 23]
# [25 27 29 31]]
Auf diese Weise kann es, da es im Wesentlichen der Operationsmethode der Liste folgt, in Vielfachen oder in umgekehrter Reihenfolge erfasst werden.
python
#Zeilen, die ein Vielfaches von 3 von hinten sind
b = a[:, ::-3]
print(b)
# [[ 7 4 1]
# [15 12 9]
# [23 20 17]
# [31 28 25]]
#Überspringen Sie eine Zeile von der ersten bis weniger als die siebte Zeile
b = a[:, 1:7:2]
print(b)
# [[ 1 3 5]
# [ 9 11 13]
# [17 19 21]
# [25 27 29]]
Persönlich ist das Hauptthema von hier. Es gibt Zeiten, in denen Sie Spalten unregelmäßig abrufen möchten, z. B. Spalten 1, 5 und 6. Es erfordert viel Arbeit, kann jedoch erreicht werden, indem ein Filter mit der gleichen Länge wie die Anzahl der Spalten vorbereitet wird.
python
#Index 1, 5,Der Wert 6 ist True,Ansonsten eine Liste mit falscher Länge 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]]
#Generieren Sie eine boolesche Nullmatrix vom Typ 1x8,Ein Muster, das nur den Indexwert der gewünschten Spalte in True ändert
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]]
#Wenn Sie andere als die angegebenen Spalten erhalten möchten, generieren Sie ein Array mit allen True-Werten,Ändern Sie nur unnötige Spalten in 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]]
Ich denke, dass die meisten Arrays, die von ~~ numpy verarbeitet werden, eine große Anzahl von Spalten haben, daher denke ich, dass die zweite Methode die Hauptmethode sein wird. In diesem Beispiel wird "np.zeros" verwendet. In einigen Situationen ist es jedoch möglicherweise einfacher, ein Array von "np.ones" mit allen Elementen "True" zu erstellen und dann nur die unerwünschten Spalten in "False" zu ändern. . ~~
python
#Generieren Sie ein 4x8-Array
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,6 Reihen herausnehmen
b = a[:, [1, 5, 6]]
print(b)
# [[ 1 5 6]
# [ 9 13 14]
# [17 21 22]
# [25 29 30]]
Ich dachte, dass es schwierig zu verstehen wäre, selbst wenn die Geschichte zu stark erweitert würde, also konzentrierte ich mich diesmal nur auf die Spalten, aber es ist auch möglich, eine bestimmte Spalte einer bestimmten Zeile zu extrahieren, indem sowohl die Zeile als auch die Spalte angegeben werden. Bei 3 Dimensionen oder mehr Mit diesen Methoden können Sie die gewünschten Elemente extrahieren.
Ich denke, dass die Methode zum Erstellen einer Nullmatrix und zum Extrahieren der Spalten, die ich ganz am Ende erklärt habe, für mich ziemlich sauber war, aber ich denke, dass es andere einfachere Methoden geben kann ~~.
@Nkay kommentierte eine intelligentere Methode zum Abrufen mehrerer Spalten, daher habe ich sie hinzugefügt. (4. Juli 2020)
Recommended Posts