[PYTHON] Numpys nicht-grundlegende Technik

Das [Schnellstart-Tutorial] von numpy (https://numpy.org/doc/stable/user/quickstart.html) hat eine weniger grundlegende (nicht sehr grundlegende) Technik, daher dachte ich, dass es interessant wäre, also werde ich sie beim Verständnis einführen.

Index eines Arrays mit einem Array

Der Index des Arrays (der Teil i in einem [i]) hat normalerweise einen skalaren Wert, aber Sie können das Array auch hier einfügen.

import numpy as np

a = np.arange(12)**2                       
i = np.array([1, 1, 3, 8, 5])             
a[i] #array([ 1,  1,  9, 64, 25], dtype=int32)

Was passiert, ist wie in der Abbildung gezeigt.

npLB1.png

Ist es ein Bild, dass das Element des Arrays i zu einem Index wird und aus dem Array eines verwendeten extrahiert wird?

Der Index kann auch auf ein zweidimensionales Array angewendet werden. In diesem Fall ist die Ausgabe auch zweidimensional.

j = np.array([[3, 6, 7], [5, 9, 7]])      
a[j]                                       
#array([[ 9, 36, 49],
#       [25, 81, 49]], dtype=int32)

Im Tutorial wird RGB als Anwendungsbeispiel angegeben, aber es scheint, dass es auch für One-Hot-Ausdrücke verwendet werden kann, die beim maschinellen Lernen verwendet werden.

one_hot = np.array([[0, 0, 0], 
                    [1, 0, 0], 
                    [0, 1, 0],      
                    [0, 0, 1]])
number = np.array([[0, 1, 2, 0], 
                  [0, 3, 2, 0]])
one_hot[number]
#array([[[0, 0, 0],
#        [1, 0, 0],
#        [0, 1, 0],
#        [0, 0, 0]],
#
#       [[0, 0, 0],
#        [0, 0, 1],
#        [0, 1, 0],
#        [0, 0, 0]]])

Beachten Sie übrigens, dass selbst wenn Sie `number [one_hot [number]]` festlegen, es nicht wiederhergestellt wird.

Sie können auch mehrere Arrays für den Index angeben.

a = np.arange(12).reshape(3,4)
#array([[ 0,  1,  2,  3],
#       [ 4,  5,  6,  7],
#       [ 8,  9, 10, 11]])
i = np.array([[0, 1],                     
              [1, 2]])
j = np.array([[2, 1],                     
              [3, 3]])
a[i, j] 
#array([[ 2,  5],
#      [ 7, 11]])

Es ist schwierig zu interpretieren, wie damit umgegangen wird, aber es ist wie folgt.

npLB3.png

Sie können auch eine Liste als Index des Arrays angeben.

a = np.arange(3,8)
a
#array([3, 4, 5, 6, 7])
a[[1,3,4]] = 0
a
#array([3, 0, 5, 0, 0])

Auch hier wird jedes Element der Liste als Index von a behandelt.

Sie können die Liste verwenden, um alle auf einmal zuzuweisen (zuzuweisen). Wenn die Liste jedoch dieselben Nummern enthält, wird die Zuweisung wiederholt und der letzte Wert zugewiesen.

a = np.arange(3,8)
a
#array([3, 4, 5, 6, 7])
a[[1,1,4]] = [1,2,3]
a
#array([3, 2, 5, 6, 3])

Indizierung mit einem Booleschen Array

Sie können ein boolesches Array erstellen, indem Sie dem Array einen logischen Operator zuweisen.

Durch die Verwendung eines Booleschen Arrays als Index wird ein eindimensionales Array mit den Elementen, die zu False werden, entfernt (beachten Sie die Form des Arrays).

a = np.arange(-3,9).reshape(3,4)
a
#array([[-3, -2, -1,  0],
#       [ 1,  2,  3,  4],
#       [ 5,  6,  7,  8]])
b = a > 0
b                                   
#array([[False, False, False, False],
#       [ True,  True,  True,  True],
#       [ True,  True,  True,  True]])
a[b]                                       
#array([1, 2, 3, 4, 5, 6, 7, 8])

Durch Zuweisen eines booleschen Arrays zu einem indizierten Array können Sie den Elementen, die die Bedingungen erfüllen, gleichzeitig zuweisen.

a[a<0] = 0                                  
a
#array([[0, 0, 0, 0],
#       [1, 2, 3, 4],
#       [5, 6, 7, 8]])

Komplexere Extraktionen sind möglich, indem dasselbe Boolesche Array wie die Dimensionen (Achse) verwendet wird.

a = np.arange(12).reshape(3,4)
b1 = np.array([False,True,True])             
b2 = np.array([True,False,True,False])     

a[b1,:] #a[b1]Aber ja
#array([[ 4,  5,  6,  7],
#       [ 8,  9, 10, 11]])

a[:,b2] #a[b2]Aber ja
#array([[ 0,  2],
#       [ 4,  6],
#       [ 8, 10]])

a[b1,b2]                                 
#array([ 4, 10])

Wenn man die Figur betrachtet, sieht es so aus.

npLB4.png

Ich frage mich, warum a [b1, b2] [4,10] anstelle von [[4,6], [8,10]] ist. Die Dokumentation sagt auch etwas Seltsames aus, also frage ich mich, ob ich mich daran erinnern muss.

Zusammenfassung

Bisher haben wir die Indizierung von Arrays mithilfe von Arrays und die Indizierung von Booleschen Arrays eingeführt. Es ist eine knifflige Technik, aber sie sollte nützlich sein, wenn Sie sie beherrschen.

Das Tutorial mit dem Link am Anfang enthält andere Techniken (ich habe es weggelassen, weil ich es nicht gut verstehen konnte). Wenn Sie es sich leisten können, lesen Sie es bitte.

Recommended Posts

Numpys nicht-grundlegende Technik
Numpy-Übung 1
Numpy [Basic]
numpy Teil 1
NumPy-Grundlagen
Numpy Memorandum _ Matrix
numpy tipps
Über Numpy
NumPy-Achse
Verwenden Sie Numpy
numpy Teil 2