Leute, die gehört haben, dass Python gut für numerische Berechnungen und maschinelles Lernen ist, und Python gestartet haben, aber es ist ein wenig schwierig, aber C ++ ist überhaupt schneller. Leute, die den Namen Numpy gehört haben, ihn aber nie benutzt haben. Ich habe versucht, numpy zu verwenden, aber der Punkt ist eine erweiterte Version des Mathe-Pakets? Jemand, der denkt. Für diese Leute werde ich Ihnen beibringen, wie man Numpy richtig benutzt!
Wenn Sie Python mit Anaconda installiert haben, haben Sie wahrscheinlich bereits Numpy. Abhängig von der Installationsmethode besteht die Möglichkeit, dass numpy enthalten ist. Lassen Sie uns zunächst prüfen, ob numpy enthalten ist.
Geben Sie python
in das Terminal ein (Eingabeaufforderung für Windows), um die Python-Konsole zu starten. In der Python-Konsole
> import numpy
Wenn bei der Eingabe kein Fehler auftritt, wird er installiert. Wenn Sie eine Fehlermeldung wie "No Module Named numpy" erhalten, wird diese nicht installiert und Sie müssen sie installieren. Im Terminal (nicht in der Python-Konsole)
$ pip install numpy
Sie können es mit installieren.
Von hier aus werden wir uns speziell mit der Programmierung mit numpy befassen, aber numpy ist
> import numpy as np
Wird importiert. Dies bedeutet, dass das Modul numpy mit dem Namen np importiert wird.
Die Grundlagen von numpy beginnen mit dem Erstellen eines Arrays. Die Anordnung mit dem Inhalt "1,2,3" ist
> arr = np.asarray([1,2,3])
> arr
array([1, 2, 3])
Du kannst es schaffen. Darüber hinaus können Sie den Typ des Arrays angeben, indem Sie "dtype" angeben. Zu den häufig verwendeten Typen gehören "np.int32", "np.float32" und "np.float64". Damit erstellen Sie ein Array vom Typ "np.int32"
> arr = np.asarray([1,2,3], dtype=np.int32)
> arr
array([1, 2, 3], dtype=int32)
Wird besorgt. So ändern Sie den Typ eines bereits vorhandenen Arrays
> i_arr = np.asarray([1,2,3], dtype=np.int32)
> f_arr = i_arr.astype(np.float32)
> f_arr
array([ 1., 2., 3.], dtype=float32)
Wird besorgt. Zu diesem Zeitpunkt ändert sich das ursprüngliche Array "i_arr" nicht.
> i_arr
array([1, 2, 3], dtype=int32)
So erstellen Sie ein mehrdimensionales Array
> arr = np.asarray([[1,2,3], [4,5,6]])
> arr
array([[1, 2, 3],
[4, 5, 6]])
Wird besorgt. Sie können den Typ wie bei eindimensional angeben und ändern. Das Element shape
enthält die Form des Arrays.
> arr.shape
(2, 3)
Dies ist ein Tupeltyp. Die Form des eindimensionalen Arrays ist übrigens
> arr = np.asarray([1,2,3])
> arr.shape
(3,)
Wird sein. Dies ist ein Tupeltyp mit nur einem Element.
Mit numpy können Sie ganz einfach spezielle Arrays erstellen.
> #Ein Array mit allen 0 Elementen
> np.zeros((2, 3))
array([[ 0., 0., 0.],
[ 0., 0., 0.]])
> #Ein Array mit allen 1 Elementen
> np.ones((2, 3))
array([[ 1., 1., 1.],
[ 1., 1., 1.]])
> #Element[0-1)Nach dem Zufallsprinzip im Bereich von initialisieren
> np.random.rand(2, 3)
array([[ 0.24025569, 0.48947483, 0.61541917],
[ 0.01197138, 0.6885749 , 0.48316059]])
> #Generieren Sie Elemente gemäß einer Normalverteilung
> np.random.randn(2, 3)
array([[ 0.23397941, -1.58230063, -0.46831152],
[ 1.01000451, -0.21079169, 0.80247674]])
Es gibt viele andere Funktionen, die Arrays generieren. Wenn Sie diese Art von Arrangement wünschen, können Sie es über Google finden.
Die Stärke von numpy ist, dass es sehr einfach ist, zwischen Arrays zu berechnen.
> a = np.asarray([[1,2,3],[4,5,6]])
Gegen
> 3 * a
array([[ 3, 6, 9],
[12, 15, 18]])
Es wird sein. Durch skalares Multiplizieren eines Arrays wird jedes Element mit einer Konstanten multipliziert. Wenn Sie einen Skalar hinzufügen
> 3 + a
array([[4, 5, 6],
[7, 8, 9]])
Und werden zu jedem Element hinzugefügt. Berechnung zwischen Arrays
> b = np.asarray([[2,3,4],[5,6,7]])
> a + b
array([[ 3, 5, 7],
[ 9, 11, 13]])
> a * b
array([[ 2, 6, 12],
[20, 30, 42]])
Bei der Berechnung von Arrays derselben Form werden die Elemente an derselben Position berechnet und das Array dieser Form zurückgegeben. Manchmal können Arrays unterschiedlicher Form berechnet werden.
> v = np.asarray([2,1,3])
> a * v
array([[ 2, 2, 9],
[ 8, 5, 18]])
> a + v
array([[3, 3, 6],
[6, 6, 9]])
Bei der Berechnung des zweidimensionalen Arrays und des eindimensionalen Arrays ergibt sich das Ergebnis der Berechnung jeder Zeile des zweidimensionalen Arrays als eindimensionales Array, wenn die Anzahl der Spalten des zweidimensionalen Arrays der Länge des eindimensionalen Arrays entspricht Ich komme wieder. Daher hat das Array die gleiche Form wie das zweidimensionale Array.
Es ist auch möglich, Operationen unter Verwendung eines zweidimensionalen Arrays als einzelne Matrix durchzuführen.
> M = np.asarray([[1,2,3], [2,3,4]])
> N = np.asarray([[1,2],[3,4], [5,6]])
Um das Produkt von zwei Arrays von zu finden
> M.dot(N)
array([[22, 28],
[31, 40]])
Wird besorgt. Hier multiplizieren wir die $ 2 \ times 3 $ -Matrix mit der $ 3 \ times 2 $ -Matrix, sodass die $ 2 \ times 2 $ -Matrix zurückgegeben wird.
Mit numpy können Sie Arrays in verschiedene Funktionen einfügen. Zu diesem Zeitpunkt wirkt die Funktion auf jedes Element. Zum Beispiel
> a = np.asarray([[1,2], [3,1])
> np.log(a)
array([[ 0. , 0.69314718],
[ 1.09861229, 0. ]])
Es wird sein. Zu diesem Zeitpunkt ändert sich das ursprüngliche Array nicht. Außerdem gibt es die meisten möglichen Funktionen wie Dreiecksfunktion, "exp", "sqrt" usw.
numpy ist auch gut darin, Array-Statistiken zu sammeln. Die ersten 100 erzeugen diese Zufallszahl.
> arr = np.random.rand(100)
Den Durchschnitt der Sequenz nehmen
> np.mean(arr)
0.52133315138159586
Wird besorgt. Die Maximal- und Minimalwerte sind
> np.max(arr)
0.98159897843423383
> np.min(arr)
0.031486992721019846
Du kannst es haben. Die Standardabweichung ist
> np.std(arr)
0.2918171894076691
Um die Summe zu bekommen
> np.sum(arr)
52.133315138159588
Wird besorgt. Sie können auch angeben, in welche Richtung Statistiken für ein zweidimensionales Array erstellt werden sollen. Zum Beispiel
> arr = np.asarray([[1,2,3], [2,3,4]])
> np.sum(arr, axis=0)
array([3, 5, 7])
> np.sum(arr, axis=1)
array([6, 9])
Es wird sein.
Einschließlich der obigen Angaben verwenden wir numpy, um den Code für die Mittelung der euklidischen Abstände von den Ursprüngen von 100 Vektoren im dreidimensionalen Raum zu berechnen.
Angenommen, das Array "data" ist ein Array der Form "(100, 3)", die erste Spalte hat $ x $ -Koordinaten, die zweite Spalte hat $ y $ -Koordinaten und die dritte Spalte hat $ z $ -Koordinaten. Hier
> data = np.random.randn(100, 3)
Generiert als. Euklidische Entfernung
d(x,y,z) = \sqrt{x^2+y^2+z^3}
Zuallererst ist also jedes Element selbst montiert.
> squared = data**2
Dann summiere die Zeilen.
> squared_sum = np.sum(squared, axis=1)
Zu diesem Zeitpunkt wird "squared_sum" zu einem eindimensionalen Array. Wenn Sie dagegen die Quadratwurzel ziehen, können Sie den euklidischen Abstand jedes Punktes ermitteln.
> dist = np.sqrt(squared_sum)
Wenn Sie den Durchschnitt dieser Entfernung nehmen
> np.mean(dist)
1.5423905808984208
ist geworden. (Da die Daten zufällig generiert werden, unterscheidet sich das Ergebnis geringfügig.)
Wenn Sie diesen Code ohne Verwendung von numpy ausführen, können Sie die for
-Schleife verwenden, um jeden der 100 Punkte zu berechnen, und die for
-Schleife für jeden Punkt verwenden, wenn die Dimension zunimmt. Der Code ist nicht nur kompliziert, sondern verlangsamt auch die Ausführung. Auf diese Weise besteht die Grundidee von numpy darin, ein großes Array sofort zu berechnen. Infolgedessen kann numpy komplexe Operationen ausführen, die für Python unglaublich schnell sind.
Übrigens habe ich diesmal eins nach dem anderen zum Üben berechnet, aber numpy hat eine Funktion namens "np.linalg.norm", so dass Sie den euklidischen Abstand leicht berechnen können.
Das ist alles für die grundlegende Verwendung von numpy, aber numpy hat viel mehr Funktionen. Zum Beispiel die Funktion np.where
, die den Index eines Elements findet, das die Bedingungen erfüllt.
Ich denke, der schnellste Weg, sich zu verbessern, besteht darin, Python zu schreiben und zu erleben, während man googelt. Geben Sie also bitte Ihr Bestes, auch wenn Sie zuerst verwirrt sind!
Recommended Posts