Python - Numpy Bibliotheksstudiennotizen

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)

Fügen Sie hier eine Bildbeschreibung ein
–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 hier eine Bildbeschreibung ein

  • Fügen Sie zwei Arrays hinzu, jedes Element im Array wird entsprechend hinzugefügt
data + data

Fügen Sie hier eine Bildbeschreibung ein
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

Fügen Sie hier eine Bildbeschreibung ein
Es ist ersichtlich, dass Daten ein Array mit 2 Zeilen und 3 Spalten sind

data.dtype

Fügen Sie hier eine Bildbeschreibung ein
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

Fügen Sie hier eine Bildbeschreibung ein
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

Fügen Sie hier eine Bildbeschreibung ein
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

Fügen Sie hier eine Bildbeschreibung ein
-ndim gibt die Dimension des Arrays zurück, es wird nur eine Zahl zurückgegeben, die die Dimension des Arrays darstellt

arr2.shape

Fügen Sie hier eine Bildbeschreibung ein
-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
Fügen Sie hier eine Bildbeschreibung ein
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)

Fügen Sie hier eine Bildbeschreibung ein
Der Datentyp des erstellten Arrays ist Gleitkomma

np.zeros(10).dtype

Fügen Sie hier eine Bildbeschreibung ein

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))

Fügen Sie hier eine Bildbeschreibung ein

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))

Fügen Sie hier eine Bildbeschreibung ein
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)

Fügen Sie hier eine Bildbeschreibung ein

np.arange(15).dtype

Fügen Sie hier eine Bildbeschreibung ein
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).Fügen Sie hier eine Bildbeschreibung ein
  • 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 GleitkommaFügen Sie hier eine Bildbeschreibung ein
  • 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])

Fügen Sie hier eine Bildbeschreibung ein
Konvertiere arr in Gleitkomma

float_arr = arr.astype(np.float64)

Fügen Sie hier eine Bildbeschreibung ein

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])

Fügen Sie hier eine Bildbeschreibung ein
In eine Ganzzahl konvertieren

int_arr2 = arr2.astype(np.int32)

Fügen Sie hier eine Bildbeschreibung ein
Sie können sehen, dass das neue Array int_arr2 den Dezimalteil des ursprünglichen Arrays abfängt und löscht
Fügen Sie hier eine Bildbeschreibung ein

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_)

Fügen Sie hier eine Bildbeschreibung ein

  • 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)

Fügen Sie hier eine Bildbeschreibung ein
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

Fügen Sie hier eine Bildbeschreibung ein

-Sie können auch den Typcode des Datentyps verwenden, um dtype darzustellen

empty_unit32 = np.empty(8, dtype = 'u4')

Fügen Sie hier eine Bildbeschreibung ein

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

Fügen Sie hier eine Bildbeschreibung ein
Multiplizieren Sie zwischen Arrays gleicher Größe, und die Elemente werden entsprechend multipliziert

arr * arr

Fügen Sie hier eine Bildbeschreibung ein

Subtrahieren Sie zwischen Arrays gleicher Größe, und die Elemente werden entsprechend subtrahiert

arr - arr

Fügen Sie hier eine Bildbeschreibung ein

Arithmetische Operationen zwischen Arrays und Skalaren geben Skalarwertoperationen an jedes Element weiter

1 / arr

Fügen Sie hier eine Bildbeschreibung ein

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.]])

Fügen Sie hier eine Bildbeschreibung ein

- Vergleiche arr und arr2

arr2 > arr

Fügen Sie hier eine Bildbeschreibung ein
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)

Fügen Sie hier eine Bildbeschreibung ein

  • Nehmen Sie das sechste Element in arr
arr[5]

Fügen Sie hier eine Bildbeschreibung ein

  • Nehmen Sie das 6. bis 8. Element in arr, schließen Sie es vor dem Schneiden und öffnen Sie es dann
arr[5: 8]

Fügen Sie hier eine Bildbeschreibung ein

  • 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

Fügen Sie hier eine Bildbeschreibung ein
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]

Fügen Sie hier eine Bildbeschreibung ein

  • 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

Fügen Sie hier eine Bildbeschreibung ein
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

Fügen Sie hier eine Bildbeschreibung ein
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

Fügen Sie hier eine Bildbeschreibung ein
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]])

Fügen Sie hier eine Bildbeschreibung ein
Nimm das dritte Element von arr2d

arr2d[2]

Fügen Sie hier eine Bildbeschreibung ein
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]

Fügen Sie hier eine Bildbeschreibung ein
Hier wird die Idee der hierarchischen Rekursion verwendet
Fügen Sie hier eine Bildbeschreibung ein

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]]])

Fügen Sie hier eine Bildbeschreibung ein

  • 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]

Fügen Sie hier eine Bildbeschreibung ein
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()

Fügen Sie hier eine Bildbeschreibung ein
Dann weisen wir 42 das erste zweidimensionale Array von arr3d dieses dreidimensionalen Arrays zu

arr3d[0] = 42

Fügen Sie hier eine Bildbeschreibung ein
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]

Fügen Sie hier eine Bildbeschreibung ein

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]

Fügen Sie hier eine Bildbeschreibung ein
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: ]

Fügen Sie hier eine Bildbeschreibung ein

  • 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]

Fügen Sie hier eine Bildbeschreibung ein
Wir erhalten eine eindimensionale Anordnung niedrigerer Dimensionen

  • Hinweis: Ein einzelner Doppelpunkt zeigt an, dass die gesamte Achse ausgewählt ist

Fügen Sie hier eine Bildbeschreibung ein

  • 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'])

Fügen Sie hier eine Bildbeschreibung ein
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)

Fügen Sie hier eine Bildbeschreibung ein

  • 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'

Fügen Sie hier eine Bildbeschreibung ein

  • 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']

Fügen Sie hier eine Bildbeschreibung ein
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: ]

Fügen Sie hier eine Bildbeschreibung ein

- Wenn Sie einen anderen Wert als 'Bob' auswählen möchten, können Sie das Ungleichheitszeichen '! =' Oder '~' zum Negieren verwenden

data[names != 'Bob']

Fügen Sie hier eine Bildbeschreibung ein
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'

Fügen Sie hier eine Bildbeschreibung ein

Verwenden Sie dann den Operator ~, um das Objekt in den Datenindex umzukehren

data[~cond]

Fügen Sie hier eine Bildbeschreibung ein

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')

Fügen Sie hier eine Bildbeschreibung ein

data[mask]

Fügen Sie hier eine Bildbeschreibung ein
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

Fügen Sie hier eine Bildbeschreibung ein

-Sie können den Wert einer gesamten Zeile oder Spalte auch über ein eindimensionales Boolesches Array festlegen

data[names != 'Joe'] = 7

Fügen Sie hier eine Bildbeschreibung ein
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))

Fügen Sie hier eine Bildbeschreibung ein
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

Fügen Sie hier eine Bildbeschreibung ein

Wir können eine Liste von Ganzzahlen in einer bestimmten Reihenfolge übergeben oder eine Teilmenge des Arrays auswählen

arr[[4, 3, 0, 6]]

Fügen Sie hier eine Bildbeschreibung ein

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))

Fügen Sie hier eine Bildbeschreibung ein
Transponieren mit Attribut T.

arr.T

Fügen Sie hier eine Bildbeschreibung ein

  • 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)

Fügen Sie hier eine Bildbeschreibung ein
Innenprodukt berechnen

np.dot(arr, arr.T)

Fügen Sie hier eine Bildbeschreibung ein

- 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))

Fügen Sie hier eine Bildbeschreibung ein

  • 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))

Fügen Sie hier eine Bildbeschreibung ein

- 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)

Fügen Sie hier eine Bildbeschreibung ein

  • 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

Ich denke du magst

Origin blog.csdn.net/Baby1601tree/article/details/96840882
Empfohlen
Rangfolge