ndarray
- Nadrray ist ein N-dimensionales Array-Objekt, ein schneller und flexibler Container für große Datenmengen
- Mit diesem Array (ndarray) können Sie mathematische Operationen für den gesamten Datenblock ausführen
Importieren Sie den Code der Nump-Bibliothek
import numpy as np
Generieren Sie einige zufällige Daten
data = np.random.randn(2, 3)
–Numpy.random.randn ()
- Die Randn-Funktion gibt ein Sample oder einen Satz von Samples mit einer Standardnormalverteilung zurück
- Die Standardnormalverteilung wird auch als u-Verteilung bezeichnet. Es handelt sich um eine Normalverteilung mit 0 als Mittelwert und 1 als Standardabweichung, bezeichnet als N (0, 1).
--Dn bedeutet jede Dimension, randn (2, 3) bedeutet, ein Array mit 2 Zeilen und 3 Spalten zurückzugeben
Arrays können mathematische Operationen ausführen
- Multiplizieren Sie jedes Element im Array mit 10
data * 10
- Fügen Sie zwei Arrays hinzu, jedes Element im Array wird entsprechend hinzugefügt
data + data
Numpy ist ein universeller mehrdimensionaler Container mit isomorphen Daten, in dem alle Elemente vom gleichen Typ sein müssen.
Jedes Array hat
- Form (ein Tupel, das die Größe jeder Dimension darstellt)
- dtype (ein Objekt zur Beschreibung des Datentyps eines Arrays)
Sehen Sie sich die Form und den Typ des Datenarrays an
data.shape
Es ist ersichtlich, dass Daten ein Array mit 2 Zeilen und 3 Spalten sind
data.dtype
Es ist ersichtlich, dass der Datentyp des Datenarrays "float64" ist.
Erstellen Sie ndarray
Die Array-Funktion kann zum Erstellen eines ndarray-Arrays verwendet werden. Sie akzeptiert alle seriellen Objekte (einschließlich anderer Arrays).
Nehmen Sie die Konvertierung einer Liste als Beispiel:
data1 = [6, 7.5, 8, 0, 1]
arr1 = np.array(data1)
arr1
Sie können sehen, dass die Listendaten1 in das Array arr1 konvertiert werden
Wenn die Liste aus einer Reihe von Listen gleicher Länge besteht, konvertiert die Array-Funktion sie in ein mehrdimensionales Array
data2 = [[1, 2, 3, 4], [5, 6, 7, 8]]
arr2 = np.array(data2)
arr2
Es ist ersichtlich, dass die aus zwei Listen bestehende Liste in ein zweidimensionales Array umgewandelt wird
Wir können die Attribute ndim und shape verwenden, um dies zu überprüfen
arr2.ndim
-ndim gibt die Dimension des Arrays zurück, es wird nur eine Zahl zurückgegeben, die die Dimension des Arrays darstellt
arr2.shape
-Wenn keine speziellen Anweisungen vorhanden sind, wählt np.array den am besten passenden Datentyp für die zu erstellenden
Daten aus. - Wie im obigen Beispiel arr1, arr2 , wird der erstellte Datentyp angezeigt. Wenn
die Liste Dezimalstellen enthält, wird das Array vom Array erstellt Der Datentyp ist Gleitkomma ->
Wenn die Liste von 'float64' alle Ganzzahlen enthält, ist der Datentyp des vom Array erstellten Arrays Ganzzahl -> 'int32'.
Die Methode --np.zeros () kann ein Array aller Nullen mit einer bestimmten Länge oder Form erstellen.
Wenn eine Zahl 10 übergeben wird, wird standardmäßig ein eindimensionales Array mit 10 Nullen erstellt
np.zeros(10)
Der Datentyp des erstellten Arrays ist Gleitkomma
np.zeros(10).dtype
Wenn Sie ein Tupel übergeben, das die Form darstellt, können Sie ein mehrdimensionales Array erstellen,
z. B. ein zweidimensionales Array aller Nullen mit 3 Zeilen und 6 Spalten
np.zeros((3, 6))
Die Methode --Np.empty () gibt ein nicht initialisiertes Array mit Länge oder Form an. Sie können auch ein Tupel übergeben, um ein mehrdimensionales Array zu erstellen,
z. B. ein dreidimensionales nicht initialisiertes Array (2 * 3 Zeilen und 2 Spalten).
np.empty((2, 3, 2))
Hinweis: Die Idee, dass np.empty ein Array mit allen Nullen zurückgibt, ist unsicher. In vielen Fällen werden einige nicht initialisierte Garbage-Werte zurückgegeben.
np.arange ()
- Der Bereich in numpy ist die Array-Version der in Python integrierten Funktion 'Bereich'. Der
Parameter N wird übergeben, was bedeutet, dass ein ganzzahliges Array von 0 bis (N-1) generiert wird.
Erstellen Sie beispielsweise ein ganzzahliges Array von 0 bis 14
np.arange(15)
np.arange(15).dtype
Hinweis: Numpy konzentriert sich auf numerische Berechnungen. Wenn nicht angegeben, sind die Datentypen im Grunde 'float64' (Gleitkommazahlen).
Im Folgenden sind einige häufig verwendete Funktionen zur Array-Erstellung aufgeführt, die häufig verwendet werden
- Array: Konvertieren Sie die Daten in ndarray (mehrdimensionales Array). Wenn dtype nicht angegeben ist, entspricht es standardmäßig dem für die Quelldaten am besten geeigneten Datentyp
- asarry: Konvertiert Daten in ndarray (mehrdimensionales Array). Der Unterschied zwischen ihm und dem Array ist -> Wenn die Quelldaten ndarray sind, kopiert das Array
eine Kopie von ndarray, asarray jedoch nicht - arange: ähnelt dem in Python integrierten Funktionsbereich, aber arange gibt ein ndarry zurück und der integrierte Bereich gibt eine Liste zurück
- Einsen: Erstellen Sie ein Array aller Einsen gemäß der angegebenen Form und dem angegebenen D-Typ. Die Standardeinstellung ist "Gleitkomma 64"
- one_like: Nehmen Sie ein anderes Array als Parameter (ermitteln Sie die Form des Arrays) und erstellen Sie ein Array aller Einsen basierend auf der Form des Parameters
- Nullen, Nullen_ähnlich: ähnlich wie Einsen und Einsen_ähnlich, erstellt jedoch ein Array aller Nullen
- leer, leer_ähnlich: ähnlich wie Einsen und Einsenähnlich, weist jedoch nur Speicherplatz zu, füllt jedoch keine Werte (alle nicht initialisierten Müllwerte werden erstellt)
- full: Verwenden Sie alle Werte im Füllwert, um ein Array basierend auf der angegebenen Form und dem angegebenen Typ zu erstellen (simulieren Sie hier eine Reihe von Füllwerten).
- full_like: Erstellen Sie ein Array mit derselben Form wie die Form eines anderen Arrays. Der Array-Wert lautet fill_value
- Auge: Geben Sie den Parameter N ein, erstellen Sie eine quadratische N * N-Identitätsmatrix (die Diagonale ist 1, der Rest ist 0), der Array-Typ ist Gleitkomma
- Identität: Wie np.eye ()
dtype
-Dtype enthält die Informationen, die erforderlich sind, um einen Teil des Speichers von ndarry als einen bestimmten Datentyp zu interpretieren
Allgemeine Numpy-Datentypen
- int8: Typcode: i1 -> vorzeichenbehaftete 8-Bit-Ganzzahl (1 Byte)
- uint8: Typcode: u1 -> vorzeichenlose 8-Bit-Ganzzahl (1 Byte)
- int16: Typcode: i2 -> vorzeichenbehaftete 16-Bit-Ganzzahl (2 Byte)
- uint16: Typcode: u2 -> vorzeichenlose 16-Bit-Ganzzahl (2 Byte)
- int32: Typcode: i4 -> vorzeichenbehaftete 32-Bit-Ganzzahl (4 Byte)
- uint32: Typcode: u4 -> vorzeichenlose 32-Bit-Ganzzahl (4 Byte)
- int64: Typcode: i8 -> vorzeichenbehaftete 64-Bit-Ganzzahl (8 Byte)
- uint64: Typcode: u8 -> vorzeichenlose 64-Bit-Ganzzahl (8 Byte)
- float16: Typcode: f2 -> Gleitkommazahl mit halber Genauigkeit
- float32: Typcode: f4 oder f -> Standard-Gleitkommazahl mit einfacher Genauigkeit (kompatibel mit C float)
- float64: Typcode: f8 oder d -> Standard-Gleitkommazahl mit doppelter Genauigkeit (kompatibel mit C-Double- und Python-Float-Objekten)
- float128: Typcode: f16 oder g -> Gleitkommazahl mit erweiterter Genauigkeit
- complex64: Typcode: c8 -> eine komplexe Zahl, die durch zwei 32-Bit-Gleitkommazahlen dargestellt wird
- complex128: Typcode: c16 -> eine komplexe Zahl, die durch zwei 64-Bit-Gleitkommazahlen dargestellt wird
- complex256: Typcode: c32 -> eine komplexe Zahl, die durch zwei 128-Bit-Gleitkommazahlen dargestellt wird
- bool: Typcode:? -> Boolescher Typ, der True und False speichert
- Objekt: Typcode: O -> Python-Objekttyp
- string_: Typcode: S -> String-Typ mit fester Länge (1 Byte pro Zeichen). Um beispielsweise einen String mit der Länge 10 zu erstellen, sollten Sie S10 verwenden
- unicode_: Typcode: U -> Unicode-Typ mit fester Länge (die Anzahl der Bytes wird von der Plattform bestimmt)
- Sie können ein Array mithilfe der Astype-Methode von ndarray explizit von einem D-Typ in einen anderen D-Typ konvertieren.
Angenommen, es gibt ein ganzzahliges Array arr
arr = np.array([1, 2, 3, 4, 5])
Konvertiere arr in Gleitkomma
float_arr = arr.astype(np.float64)
Wenn Sie eine Gleitkommazahl in eine Ganzzahl konvertieren, wird der Bruchteil abgeschnitten und gelöscht.
Beispielsweise gibt es ein Gleitkommaarray arr2
arr2 = np.array([3.7, -1.2, -2.6, 0.5, 12.9, 10.1])
In eine Ganzzahl konvertieren
int_arr2 = arr2.astype(np.int32)
Sie können sehen, dass das neue Array int_arr2 den Dezimalteil des ursprünglichen Arrays abfängt und löscht
Sie können auch astype verwenden, um ein String-Array in eine numerische Form zu konvertieren.
Angenommen, es gibt ein String-Array numeric_strings
numeric_strings = np.array(['1.25', '-9.6', '42'], dtype = np.string_)
- Hinweis: Achten Sie bei Verwendung des Typs np.string_ auf die Länge der Zeichenfolge, da die Datengröße der Zeichenfolge von numpy festgelegt ist und beim Abfangen kein Fehler gemeldet wird
- Wenn während des Konvertierungsprozesses die Konvertierung von Zeichenfolge -> numerischem Wert fehlschlägt (z. B. "Eins" kann nicht in numerischen Wert 1 konvertiert werden, wird ein ValueError ausgelöst
- Wir können auch den dtype eines Arrays als Parameter an die astype-Methode übergeben.
Angenommen, es gibt ein ganzzahliges Array int_array und ein Gleitkomma-Array-Kaliber
int_array = np.arange(10)
calibers = np.array([.22, .270, .357, .380, .44, .50], dtype = np.float64)
Wenn Sie int_array in dasselbe Gleitkomma-Array wie Kaliber konvertieren möchten, können Sie den Kaliber-D-Typ an den Parameter der Astype-Methode übergeben
int_float = int_array.astype(calibers.dtype)
int_float.dtype
-Sie können auch den Typcode des Datentyps verwenden, um dtype darzustellen
empty_unit32 = np.empty(8, dtype = 'u4')
Numpy Array-Operationen
- Jede arithmetische Operation zwischen Arrays gleicher Größe wendet die Operation auf die Elementebene an
Erstellen Sie ein zweidimensionales Array arr mit 2 Zeilen und 3 Spalten
arr = np.array([[1., 2., 3.], [4., 5., 6.]])
arr.shape
Multiplizieren Sie zwischen Arrays gleicher Größe, und die Elemente werden entsprechend multipliziert
arr * arr
Subtrahieren Sie zwischen Arrays gleicher Größe, und die Elemente werden entsprechend subtrahiert
arr - arr
Arithmetische Operationen zwischen Arrays und Skalaren geben Skalarwertoperationen an jedes Element weiter
1 / arr
Ein Vergleich zwischen Arrays derselben Größe ergibt ein boolesches Array.
Erstellen wir ein zweidimensionales Array arr mit derselben Größe wie arr
arr2 = np.array([[0., 4., 1.], [7., 2., 12.]])
- Vergleiche arr und arr2
arr2 > arr
Sie können sehen, dass ein Boolesches Array derselben Größe generiert wird und jedes Element im Array einen Vergleich von arr und arr2 darstellt.
Grundlegende Indizierung und Aufteilung
Eindimensionales Array-Slice
- An der Oberfläche ähnelt das eindimensionale Array-Slicing der Listen-Slicing-Funktion von Python
Erstellen Sie ein 0-9 Integer-Array arr
arr = np.arange(10)
- Nehmen Sie das sechste Element in arr
arr[5]
- Nehmen Sie das 6. bis 8. Element in arr, schließen Sie es vor dem Schneiden und öffnen Sie es dann
arr[5: 8]
- Sie können dem geschnittenen Teil einen Wert zuweisen, und das Quellarray wird an Ort und Stelle geändert.
Wenn ich die 6. bis 8. Arr-Nummer mit '12' zuordne.
arr[5: 8] = 12
Wie Sie sehen können, wird das arr-Array in situ geändert.
Der wichtigste Unterschied zwischen dem Array-Slice und dem Python-Listen-Slice besteht also darin, dass das Array-Slice eine Ansicht der Originaldaten ist. Dies bedeutet, dass die Daten nicht kopiert werden und jede Änderung in der Ansicht direkt wiedergegeben wird Auf das Quellarray
Erstellen Sie beispielsweise ein Slice von arr_slice
arr_slice = arr[5: 8]
- Hinweis: Wenn wir den Wert von arr_slice ändern, wird die Änderung im ursprünglichen Array arr wiedergegeben
Weisen Sie beispielsweise '12345' die zweite Nummer von arr_slice zu.
arr_slice[1] = 12345
Wie Sie sehen können, werden auch die Daten des Quellarrays geändert
- Slice [:] bedeutet, dass alle Werte im Array abgeschnitten werden.
Beispielsweise weisen wir jedem Tupel in arr_slice den Wert '64' zu
arr_slice[:] = 64
Es ist ersichtlich, dass jedem Element in arr_slice der Wert '64' zugewiesen wird.
- Der Grund, warum sich der obige Vorgang vom nativen Python-Slicing unterscheidet, ist, dass Numpy für die Verarbeitung von Big Data ausgelegt ist. Wenn die Daten kopiert und kopiert werden, wird dies die Leistung und den Speicher stark belasten.
- Wenn Sie anstelle der Ansicht eine Slice-Kopie des ndarray (Arrays) erhalten möchten, können Sie natürlich nach dem Slice eine copy () -Methode hinzufügen
Zum Beispiel möchten wir eine Slice-Kopie der 6. bis 8. Elemente von arr erhalten und sie mit '6' zuweisen.
arr3 = arr[5: 8].copy()
arr3[:] = 6
Wie Sie sehen können, wirkt sich das Bearbeiten der Kopie des Array-Slice nicht auf das Quell-Array aus
Zweidimensionales Array
- In einem zweidimensionalen Array sind die Elemente an jeder Indexposition keine Skalare mehr wie eindimensionale Arrays, sondern eindimensionale Arrays
Erstellen Sie beispielsweise ein zweidimensionales Array arr2d
arr2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
Nimm das dritte Element von arr2d
arr2d[2]
Das Ergebnis ist ein eindimensionales Array
- Wenn Sie ein einzelnes Skalarelement erhalten möchten, können Sie rekursiv auf die hochdimensionalen Elemente zugreifen.
Ich möchte beispielsweise den dritten Skalar des ersten eindimensionalen Arrays eines zweidimensionalen Arrays erhalten
arr2d[0, 2]
Hier wird die Idee der hierarchischen Rekursion verwendet
Mehrdimensionale Arrays
- Das Prinzip des mehrdimensionalen Arrays ähnelt dem des zweidimensionalen Arrays
Wir erstellen ein dreidimensionales 2 * 2 * 3-Array arr3d
arr3d = np.array([[[1, 2, 3], [4, 5, 6]],
[[7, 8, 9], [10, 11, 12]]])
- Wenn Sie arr3d in Scheiben schneiden und einen skalaren Parameter übergeben, wird ein zweidimensionales Array zurückgegeben, das um eine Dimension reduziert ist
Zum Beispiel möchte ich das erste zweidimensionale Array von arr3d erhalten
arr3d[0]
Wie Sie sehen können, wird ein zweidimensionales 2 * 3-Array zurückgegeben. Mit
zunehmendem Slice-Parameter nimmt die Dimension des zurückgegebenen Arrays ab, bis ein Skalarwert zurückgegeben wird.
- arr3d [0] können sowohl Skalarwerte als auch Arrays zugewiesen werden.
Bevor wir die Zuordnung anzeigen, erstellen wir zunächst eine Kopie von arr3d [0] old_values, um das Quellarray wiederherzustellen
old_values = arr3d[0].copy()
Dann weisen wir 42 das erste zweidimensionale Array von arr3d dieses dreidimensionalen Arrays zu
arr3d[0] = 42
Wie Sie sehen können, wird jedem Element in dem ersten zweidimensionalen Array, das durch Schneiden erhalten wird, ein Wert von 42 zugewiesen
Wir verwenden die Originalkopie, um das Quellarray wiederherzustellen
arr3d[0] = old_values
- Beachten Sie, dass das Slice eine Ansicht des Quellarrays zurückgibt, wenn keine spezielle Behandlung erfolgt. Wenn Sie das Slice ändern, wirkt sich dies auf den Wert des Quellarrays aus
Scheibenindex
- Die Slicing-Syntax von ndarray ähnelt
der von eindimensionalen Objekten wie Python-Listen. Schauen wir uns das vorherige eindimensionale Array arr an, wir nehmen das zweite bis sechste Element von arr
arr[1:6]
Bei einem zweidimensionalen 3 * 3-Array arr2d wählt der Slice Elemente entlang einer Achse aus, die 0. Achse ist die Zeile und die 1. Achse ist die Spalte.
Wir wählen die ersten beiden Zeilen des zweidimensionalen Arrays aus
arr2d[:2]
Hier ist zu sehen, dass arr2d [: 2] eine einfache Art ist, arr2d [0: 2] zu schreiben, was bedeutet, dass die ersten beiden Zeilen von arr2d ausgewählt werden (vorne geschlossen und dann offen).
-Es ist auch möglich, mehrere Slices gleichzeitig zu übergeben. Beispielsweise müssen wir alle Daten nach der zweiten Spalte in den ersten beiden Zeilen des arr2d-Arrays auswählen
arr2d[ :2, 1: ]
- Durch Mischen von ganzzahligen Indizes und Slices können Sie niedrigdimensionale Slices erhalten.
Ich möchte beispielsweise die ersten beiden Spalten der zweiten Zeile auswählen.
arr2d[1, :2]
Wir erhalten eine eindimensionale Anordnung niedrigerer Dimensionen
- Hinweis: Ein einzelner Doppelpunkt zeigt an, dass die gesamte Achse ausgewählt ist
- Natürlich wird die Zuweisungsoperation des Slice auch auf die gesamte Auswahl verteilt, da das Slice die Ansicht ist, nachdem das Quellarray verarbeitet wurde, und das Quellarray von der Änderung des Slice betroffen ist
Boolescher Index
- Angenommen, wir haben Array-Daten zum Speichern von Daten und Array-Namen zum Speichern von Namen (mit Duplikaten).
names = np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'])
Wir verwenden die Randn-Funktion in numpy.random, um eine Standardnormalverteilung mit zufälligen Array-Daten mit 7 Zeilen und 4 Spalten zu generieren
data = np.random.randn(7, 4)
- Angenommen, jeder Name im Namensarray entspricht jeder Zeile im Datenwert.
Wir möchten alle Zeilen auswählen, die dem Namen 'Bob' entsprechen.
- Schauen wir uns an, welche Namen in Namen "Bob" sind.
names == 'Bob'
- Hier müssen Sie das Zeichen '==' anstelle des Zeichens '=' verwenden, andernfalls weisen Sie jedem Element in Namen 'Bob' zu
- Es ist ersichtlich, dass ein eindimensionales Boolesches Array generiert wird und das Element mit dem Element 'Bob' True zurückgibt, andernfalls ist es False
-Nächste übergeben wir das zurückgegebene boolesche Array als Index an Daten
data[names == 'Bob']
Es ist nicht schwer festzustellen, dass die Zeilen ausgewählt wurden, die 'Bob' in den Daten entsprechen
- Hinweis: Die Länge des Booleschen Arrays muss mit der Länge der indizierten Achse übereinstimmen. Wenn die Länge inkonsistent ist, tritt ein Fehler auf
- Natürlich können Sie auch mehr Achsen indizieren, z. B. einen Spaltenindex hinzufügen. Ich möchte die Daten nach der zweiten Spalte der Zeile abrufen, die 'Bob' in Daten entspricht
data[names == 'Bob', 2: ]
- Wenn Sie einen anderen Wert als 'Bob' auswählen möchten, können Sie das Ungleichheitszeichen '! =' Oder '~' zum Negieren verwenden
data[names != 'Bob']
Infolgedessen werden die verbleibenden Zeilen mit Ausnahme der Zeile, die Bob entspricht, ausgewählt
- Wir verwenden häufig den Operator '~', um eine bedingte Inversion durchzuführen.
Beispielsweise übergeben wir zuerst das boolesche Array von 'Bob' an eine Objektbedingung
cond = names == 'Bob'
Verwenden Sie dann den Operator ~, um das Objekt in den Datenindex umzukehren
data[~cond]
Infolgedessen werden auch die verbleibenden Zeilen mit Ausnahme der Zeile ausgewählt, die Bob entspricht
-Wenn wir Beurteilungsbedingungen hinzufügen möchten, können wir & (und), | (oder) und andere boolesche arithmetische Operatoren verwenden (Sie können die Schlüsselwörter und und oder in Python nicht verwenden). Zum
Beispiel möchte ich gleichzeitig 'Bob' auswählen Die Zeilen, die den beiden Namen 'und' Will 'in Daten entsprechen
mask = (names == 'Bob') | (names == 'Will')
data[mask]
Infolgedessen werden die Zeilen ausgewählt, die Bob und Will entsprechen
- Hinweis: Wenn Sie Daten im Array anhand des Booleschen Index auswählen, wird immer eine Ansicht der Daten erstellt
- Wir setzen Werte oft über boolesche Arrays.
Setzen Sie beispielsweise alle negativen Werte in Daten auf 0
data[data < 0] = 0
-Sie können den Wert einer gesamten Zeile oder Spalte auch über ein eindimensionales Boolesches Array festlegen
data[names != 'Joe'] = 7
Wie Sie sehen können, wird den Daten, die den Elementen in der Zeile mit dem Namen "Joe" entsprechen, der Wert 7 zugewiesen
Ausgefallener Index
- Ausgefallene Indizierung bezieht sich auf: Indizierung mit ganzzahligen Arrays
- Angenommen, es gibt ein 8 * 4-Array arr
arr = np.empty((8, 4))
Dieses Array dient nur zum Erstellen von Speicherplatz und enthält nicht initialisierte Garbage-Werte
-Jetzt füllen wir dieses Array mit einer for-Schleife
for i in range(8):
arr[i] = i
Wir können eine Liste von Ganzzahlen in einer bestimmten Reihenfolge übergeben oder eine Teilmenge des Arrays auswählen
arr[[4, 3, 0, 6]]
Array-Transposition und Achsenkonvertierung
- Die Transponierung ähnelt der Array-Umformung
- Transponieren führt keine Kopiervorgänge aus und gibt eine Ansicht der Quelldaten zurück
- Das Array hat ein spezielles Attribut T für die Transponierung
Erstellen Sie ein zweidimensionales Array mit 3 Zeilen und 5 Spalten
arr = np.arange(15).reshape((3, 5))
Transponieren mit Attribut T.
arr.T
- Bei der Durchführung von Matrixberechnungen (z. B. der Berechnung des inneren Produkts einer Matrix) ist häufig eine Transponierung erforderlich
- Um das innere Produkt der Matrix zu berechnen, können wir die Punktfunktion in numpy verwenden
- Tatsächlich gibt dot () das Punktprodukt zweier Arrays zurück
- Wir erstellen ein zweidimensionales Array und versuchen, das innere Produkt davon und sein transponiertes Array zu berechnen
arr = np.random.randn(6, 3)
Innenprodukt berechnen
np.dot(arr, arr.T)
- Für die Transposition eines dreistelligen Arrays muss hier ein Konzept eingeführt werden: Für die Transponierung ist ein Tupel erforderlich, das aus Achsnummern besteht.
Erstellen Sie beispielsweise ein dreidimensionales 2 * 2 * 4-Array
arr = np.arange(16).reshape((2, 2, 4))
- Nummerieren Sie die drei Achsen des dreidimensionalen Arrays: 0, 1, 2 Ich stelle mir die Länge (0), Breite (1) und Höhe (2) eines Quaders vor
- Wenn es transponiert ist, entspricht es der horizontalen Drehung des Quaders um 90 Grad, und die Werte für Länge und Breite werden subjektiv als Austausch verstanden: Die ursprüngliche Länge wird zur Breite, und die Breite wird zur Länge, sodass Länge, Breite und Höhe des transponierten Quaders entsprechen Die Achsnummern des ursprünglichen Quaders sind 1 (Breite), 0 (Länge), 2 (Höhe)
arr.transpose((1, 0, 2))
- Lassen Sie uns über die Transponierungsfunktion in numpy sprechen. Die Parameter in transponieren können als Achsenbeschriftungen des Arrays verstanden werden
- Bei eindimensionalen Arrays funktioniert numpy.transpose () nicht, da nur eine Achse vorhanden ist
- Die Transponierungsoperation für das zweidimensionale Array ist die Transponierungsoperation für das ursprüngliche Array, und die Achsenbeschriftung wird von (0, 1) in (1, 0) konvertiert.
- Bei einem dreidimensionalen Array transformiert die Transponierung zwei der drei Achsen (siehe Definition dieser Transponierung).
- In ndarray gibt es auch eine Swapax-Methode, mit der Achsen ausgetauscht werden können.
Zum Beispiel möchte ich die zweite und dritte Achse eines dreidimensionalen Arrays austauschen
arr.swapaxes(1, 2)
- Die Swapaxes-Methode ist eigentlich eine andere Art der Transponierung, was sehr praktisch ist
- Es sollte auch beachtet werden, dass die Swapaxes-Methode keinen Kopiervorgang ausführt und eine Ansicht der Quelldaten zurückgibt