[PYTHON] Erhöhen Sie die "Numpy Power" mit [100 Numpy-Übungen] (11. bis 20. Frage)

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.

  1. Create a 3x3 identity matrix (★☆☆)

** "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.]]
  1. Create a 3x3x3 array with random values (★☆☆)

** "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]]]
  1. Create a 10x10 array with random values and find the minimum and maximum values (★☆☆)

** "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
  1. Create a random vector of size 30 and find the mean value (★☆☆)

** "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
  1. Create a 2d array with 1 on the border and 0 inside (★☆☆)

** "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.]])
  1. How to add a border (filled with 0's) around an existing array? (★☆☆)

** "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.

  1. What is the result of the following expression? (★☆☆)

** "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
  1. Create a 5x5 matrix with values 1,2,3,4 just below the diagonal (★☆☆) ** "Erstellen Sie eine 5x5-Sequenz, in der die Komponenten unmittelbar unter den diagonalen Komponenten 1,2,3,4 sind" **

Es ist schwer zu verstehen, aber ich frage mich, ob ich so ein Array erstellen soll. numpy_100_18.png

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]]
  1. Create a 8x8 matrix and fill it with a checkerboard pattern (★☆☆) ** "Erstellen Sie ein Array von 8x8-Schachbrettmustern" **

Das Schachbrettmuster ist ein solches Muster. Es wird auch als Schachbrettmuster bezeichnet.

numpy_100_19_checker.png

Die weiße Farbe dieses Musters ist "0" und die schwarze Farbe ist "1", und die folgende Anordnung kann erzeugt werden.

numpy_100_19.png

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]]
  1. Consider a (6,7,8) shape array, what is the index (x,y,z) of the 100th element? ** "Wie lautet der Index (x, y, z) des 100. Elements in einem mehrdimensionalen 6x7x8-Array? 』**

Der Einfachheit halber verwenden wir eine 3x3-Matrix. numpy_100_20.png

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

Erhöhen Sie die "Numpy Power" mit [100 Numpy-Übungen] (11. bis 20. Frage)
Erhöhen Sie die "Numpy Power" mit [100 Numpy-Übungen] (11. bis 20. Frage)
So schalten Sie Linux unter Ultra96-V2 aus
Fügen Sie einem leeren Array mit numpy Zeilen hinzu
So schalten Sie Linux unter Ultra96-V2 aus
Fügen Sie einem leeren Array mit numpy Zeilen hinzu