Erhöhen Sie die "Numpy Power" mit [100 Numpy-Übungen](1. bis 10. Frage) Ausgehend vom vorherigen Artikel werde ich die 11. bis 20. Frage lösen.
** "Erstelle eine 3x3-Einheitsmatrix" **
Eine Einheitsmatrix von n × n kann mit np.eye (n) erzeugt werden.
100_Numpy_exercises.ipynb-(11)answer
Z = np.eye(3)
print(Z)
Ausführungsergebnis
100_Numpy_exercises.ipynb-(11)output
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
** "Erstellen Sie ein 3x3x3-Array (Elemente sind zufällig)" **
Verwenden Sie das Modul numpy.random, um Zufallszahlen zu generieren.
100_Numpy_exercises.ipynb-(12)answer
Z = np.random.rand(3,3,3) #Zufallszahl im 3x3x3-Array(0.0 oder mehr 1.Weniger als 0)
print(Z)
Ausführungsergebnis
100_Numpy_exercises.ipynb-(12)output
[[[0.44518095 0.00924118 0.59004146]
[0.12450099 0.91674964 0.77679575]
[0.28061072 0.03625354 0.87043565]]
[[0.76171958 0.39143584 0.02266029]
[0.51873782 0.60923224 0.69941338]
[0.41821728 0.65331316 0.74005185]]
[[0.25365995 0.45885229 0.41108347]
[0.74013277 0.44224959 0.39538442]
[0.27518178 0.50242514 0.54273645]]]
Wenn Sie ein Array mit ganzzahligen Zufallszahlen erstellen möchten, verwenden Sie numpy.random.randint ().
Geben Sie das Argument in Form von numpy.random.randint (niedrig, hoch, Größe) an. → Generieren Sie ein Array mit der in size angegebenen Größe mit einer ganzzahligen Zufallszahl größer oder gleich niedrig und kleiner als hoch.
100_Numpy_exercises.ipynb-(12)answer
Z = np.random.randint(1,10,(3,3,3)) #Zufallszahl im 3x3x3-Array(Eine Ganzzahl größer oder gleich 1 und kleiner als 10.)
print(Z)
Ausführungsergebnis
100_Numpy_exercises.ipynb-(12)output
[[[4 2 8]
[2 5 9]
[9 4 6]]
[[6 1 8]
[1 6 9]
[5 3 5]]
[[8 9 8]
[8 9 4]
[7 8 4]]]
** "Generiere ein 10x10 Array mit Zufallszahlen und finde die minimalen und maximalen Werte des Elements" **
Die zufällige Generierung in der ersten Hälfte ist eine Überprüfung der vorherigen Frage. Das Problem ist die zweite Hälfte. Das Minimum und Maximum des Arrays kann mit den Funktionen min () und max () angezeigt werden. Es ist leicht zu verstehen.
100_Numpy_exercises.ipynb-(13)answer
Z = np.random.rand(10,10)
print(Z)
print(Z.min())
print(Z.max())
Ausführungsergebnis
100_Numpy_exercises.ipynb-(13)output
[[0.52234883 0.04961266 0.26979588 0.35807264 0.58767559 0.66650289
0.51751858 0.00749977 0.64916673 0.52928179]
[0.84590062 0.475141 0.98199741 0.85117845 0.07182633 0.85569791
0.68031337 0.39577058 0.3102539 0.05988267]
[0.1908481 0.44464734 0.42211624 0.33883119 0.47234289 0.88443684
0.67840264 0.11499548 0.01561011 0.62472268]
[0.68165249 0.56003177 0.69289739 0.01834723 0.82186756 0.33528515
0.33715765 0.89662065 0.91279419 0.95973881]
[0.16768925 0.88251896 0.7545505 0.80567805 0.0875194 0.86998789
0.42720398 0.73700043 0.95089544 0.87874673]
[0.61277308 0.20511706 0.7039127 0.55107676 0.00495881 0.93791274
0.5540698 0.17465328 0.17021889 0.75724567]
[0.20103278 0.0402996 0.86112665 0.22460515 0.49205103 0.67606385
0.97352361 0.48226577 0.1698369 0.75163188]
[0.08707084 0.94483062 0.82773455 0.849915 0.54699492 0.63773099
0.88614943 0.839312 0.2898842 0.49742767]
[0.50516571 0.25980059 0.78911141 0.17191684 0.41938205 0.98415545
0.22282797 0.06791284 0.44208603 0.30956802]
[0.49319972 0.09882225 0.08468636 0.64297834 0.57264345 0.49475321
0.0089241 0.28765751 0.84352742 0.962471 ]]
0.004958805565047131
0.9841554497271033
** "Erstellen Sie einen Vektor mit einer Größe von 30 und ermitteln Sie den Durchschnittswert" **
Verwenden Sie mean (), um den Durchschnittswert des Arrays zu ermitteln. Dies ist auch das gleiche.
100_Numpy_exercises.ipynb-(14)answer
Z = np.random.rand(30)
print(Z)
print(Z.mean())
Ausführungsergebnis
100_Numpy_exercises.ipynb-(14)output
[0.71731749 0.27092985 0.47882913 0.94756227 0.35222887 0.45151348
0.83705811 0.66280134 0.43406269 0.53061543 0.88052437 0.93703825
0.02288098 0.4235356 0.69145184 0.97566151 0.60787705 0.15327448
0.85466264 0.8320094 0.31804771 0.43561608 0.8271854 0.57419325
0.83537801 0.33995759 0.92256564 0.40740555 0.70334292 0.13671002]
0.5854078986104199
** "Erstellen Sie ein zweidimensionales Array mit einer Grenze von 1 und einem Innenraum von 0" **
Ich denke, es gibt verschiedene Möglichkeiten, dies zu tun, aber es scheint einfach zu sein, ein Array aller "1" zu erstellen und dann das Innere auf "0" umzuschreiben. Geben Sie den Bereich mithilfe von Slices an, um das Innere mit "0" neu zu schreiben. Machen wir es mit einem 10x10 Array.
100_Numpy_exercises.ipynb-(15)answer
Z = np.ones((10,10))
Z[1:-1,1:-1]=0
print(Z)
Ausführungsergebnis
100_Numpy_exercises.ipynb-(15)output
array([[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
[1., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
[1., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
[1., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
[1., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
[1., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
[1., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
[1., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
[1., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]])
** "Wie füge ich 0 Elemente um ein vorhandenes Array hinzu?" 』**
Das ist etwas besorgniserregend. Werfen wir einen Blick auf den Hinweis.
hint: np.pad
Es scheint gut, eine Funktion namens np.pad () zu verwenden. Dieses Pad ist gepolstert. Eine Funktion, mit der Sie ein anderes Element um ein Array einbetten können.
Angenommen, Sie haben ein eindimensionales Array mit "a = [1,2,3]". Wenn Sie eine vor und nach diesem Array mit 0 füllen möchten,
print(np.pad(a, [1,1], mode="constant"))
Wird besorgt.
Ausführungsergebnis
[0, 1, 2, 3, 0]
numpy.pad(array, pad_width, mode=xxx)
Array: vorhandenes Array pad_width: Wie viele Minuten vor und nach dem Array sollten gefüllt werden. Geben Sie als (vor_n, nach_n) an. Wenn Vorder- und Rückseite identisch sind, können Sie es als n angeben. Modus: Welcher Wert soll gefüllt werden? Wenn "Konstante" angegeben ist, wird diese mit einer Konstante gefüllt (Standard ist 0). Wenn Sie es mit etwas anderem als 0 füllen möchten, geben Sie den Wert N an, den Sie füllen möchten, z. B. constant_values = N.
Was ist mit einem zweidimensionalen Array? Machen wir das.
Z = np.array([[1,2,3],
[4,5,6]])
print(np.pad(Z, [1,1], mode="constant",constant_values=99))
Ausführungsergebnis
[[99 99 99 99 99]
[99 1 2 3 99]
[99 4 5 6 99]
[99 99 99 99 99]]
"99" wurde um das ursprüngliche Array herum gefüllt.
** "Was kommt als nächstes? 』**
0 * np.nan
np.nan == np.nan
np.inf > np.nan
np.nan - np.nan
np.nan in set([np.nan])
0.3 == 3 * 0.1
Das Ergebnis der Ausführung jeder Zeile wird in Frage gestellt.
Was ist das häufige "np.nan"? "Nan (auch als NaN geschrieben)" bedeutet auf Japanisch "Keine Zahl" oder "Nicht-Zahl". Nehmen wir an, dies ist "eine Zahl, keine Zahl". Ein Symbol, das eine Nichtzahl darstellt, obwohl erwartet wird, dass es sich aufgrund einer Gleitkommaoperation um eine Zahl handelt.
Dieses NaN hat zwei Hauptmerkmale.
** 1. Egal welcher Wert verglichen wird (== oder groß oder klein), das Ergebnis ist False **
#Vergleichen Sie welchen Wert mit NaN(==Und groß und klein)Aber das Ergebnis ist falsch
print(np.nan == 10)
print(np.nan > 10)
print(np.nan < 10)
print(np.nan == np.nan)
Ausführungsergebnis
False
False
False
False
** 2. Unabhängig davon, welcher Wert addiert, subtrahiert, multipliziert oder dividiert wird, ist das Ergebnis NaN **
#Unabhängig davon, welcher Wert durch NaN addiert, subtrahiert, multipliziert oder dividiert wird, ist das Ergebnis NaN.
print(np.nan + 10)
print(np.nan - 10)
print(np.nan * 10)
print(np.nan / 10)
Ausführungsergebnis
nan
nan
nan
nan
Übrigens, wenn Sie "type (np.nan)" eingeben und den Typ von np.nan überprüfen, ist es "float". Es ist nur eine Zahl, keine Zahl. Es ist ein bisschen seltsam.
Lassen Sie uns nun, basierend auf dem oben Gesagten, das Problem Zeile für Zeile betrachten.
0 * np.nan
Egal, was Sie mit NaN multiplizieren, das Ergebnis ist NaN. Es ist keine Ausnahme, auch wenn es 0 ist.
print(0 * np.nan)
Ausführungsergebnis
nan
np.nan == np.nan
Egal wie viele Sie mit NaN vergleichen, es ist falsch.
print(np.nan == np.nan)
Ausführungsergebnis
False
np.inf > np.nan
np.inf
bedeutet" unendlich ".
Egal wie viele Sie mit NaN vergleichen, es wird falsch sein. Es ist falsch, selbst im Vergleich zur Unendlichkeit.
print(np.inf > np.nan)
Ausführungsergebnis
False
np.nan - np.nan
NaN kann durch Addition, Subtraktion, Multiplikation oder Division von NaN erhalten werden.
print(np.nan - np.nan)
Ausführungsergebnis
nan
np.nan in set([np.nan])
Gibt es ein np.nan
in der Menge np.nan
, was wahr ist?
print(np.nan in set([np.nan]))
Ausführungsergebnis
True
0.3 == 3 * 0.1
Dies scheint auf den ersten Blick wahr zu sein, aber das Ergebnis ist falsch.
In Dezimalzahlen ist 0,3 0,3, aber im Computer werden Gleitkommazahlen durch ** binär ** dargestellt. Daher kann es nicht genau den gleichen Wert wie die Dezimalzahl 0,3 darstellen.
Da es einfacher zu verstehen ist, wenn Sie es tatsächlich sehen, verwenden wir format (), um "0,3" und "3 * 0,1" mit 20 Nachkommastellen anzuzeigen.
print(format(0.3, '.20f'))
print(format(3 * 0.1, '.20f'))
Ausführungsergebnis
0.29999999999999998890
0.30000000000000004441
Sie können sehen, dass keiner genau 0,3 ist.
Daher sind "0,3" und "3 * 0,1" nicht äquivalent, so dass 0,3 == 3 * 0,1 falsch ist.
print(0.3 == 3 * 0.1)
Ausführungsergebnis
False
Es ist schwer zu verstehen, aber ich frage mich, ob ich so ein Array erstellen soll.
Verwenden Sie np.diag (), um mit den diagonalen Komponenten der Sequenz zu arbeiten.
Wenn Sie einen Vektor oder eine Liste als Argument angeben, wird eine quadratische Matrix mit dieser als diagonale Komponente erstellt.
print(np.diag([1,2,3,4]))
Ausführungsergebnis
[[1 0 0 0]
[0 2 0 0]
[0 0 3 0]
[0 0 0 4]]
Sie können in np.diag () einen anderen Parameter namens k angeben.
Zum Beispiel erzeugt np.diag (v, k = n) ein Array, in dem n Elemente über der diagonalen Komponente v sind. (Wenn n eine negative Zahl ist, ist das Element n unter der diagonalen Komponente v)
Das Problem ist diesmal nicht die diagonale Komponente, sondern das Element unmittelbar unter der diagonalen Komponente ist 1,2,3,4, also Geben Sie im Argument von np.diag () k = -1 an.
100_Numpy_exercises.ipynb-(18)answer
Z = np.diag([1,2,3,4],k=-1)
print(Z)
Ausführungsergebnis
100_Numpy_exercises.ipynb-(18)output
[[0 0 0 0 0]
[1 0 0 0 0]
[0 2 0 0 0]
[0 0 3 0 0]
[0 0 0 4 0]]
Das Schachbrettmuster ist ein solches Muster. Es wird auch als Schachbrettmuster bezeichnet.
Die weiße Farbe dieses Musters ist "0" und die schwarze Farbe ist "1", und die folgende Anordnung kann erzeugt werden.
Erstellen Sie zuerst ein 8x8-Array mit allen 0 Elementen und schreiben Sie dann jedes andere Element auf 1 um.
100_Numpy_exercises.ipynb-(19)answer
Z = np.zeros((8,8),dtype=int)
Z[::2,::2] = 1
Z[1::2,1::2] = 1
print(Z)
Ausführungsergebnis
100_Numpy_exercises.ipynb-(19)output
[[1 0 1 0 1 0 1 0]
[0 1 0 1 0 1 0 1]
[1 0 1 0 1 0 1 0]
[0 1 0 1 0 1 0 1]
[1 0 1 0 1 0 1 0]
[0 1 0 1 0 1 0 1]
[1 0 1 0 1 0 1 0]
[0 1 0 1 0 1 0 1]]
Der Einfachheit halber verwenden wir eine 3x3-Matrix.
Mehrdimensionale Arrays können auch in einer Dimension angeordnet und vom Kopf aus indiziert werden. Zu diesem Zeitpunkt wird beispielsweise das fünfte Element (Index ist ** 4 **) in der obigen Figur als ** (1,1) ** ausgedrückt, wenn es durch den Index eines zweidimensionalen 3 × 3-Arrays ausgedrückt wird. tun können.
Sie können sich np.unravel_index () als eine Funktion vorstellen, die einen in einer Dimension ausgedrückten Index in einen Index in einem mehrdimensionalen Array konvertiert.
np.unravel_index(indices,shape)
Der Argumentindex ist ein eindimensionaler Index. Form gibt die Größe des mehrdimensionalen Arrays an.
Dieses Mal möchte ich den Index des 100. Elements als Index in einem mehrdimensionalen 6x7x8-Array ausdrücken, damit ich ihn wie folgt schreiben kann. (Da es 100. ist, wird der Index 99 sein)
100_Numpy_exercises.ipynb-(20)answer
print(np.unravel_index(99, (6,7,8)))
Ausführungsergebnis
100_Numpy_exercises.ipynb-(20)output
(1, 5, 3)
Das ist alles für diese Zeit. Ich habe ein knuspriges Problem. Nächstes Mal werde ich die 21. bis 30. Frage lösen.
Recommended Posts