Skip to content
Snippets Groups Projects
Commit 3bfaf376 authored by Christof Kaufmann's avatar Christof Kaufmann
Browse files

Quick-Fix

parent 0e656988
No related branches found
No related tags found
No related merge requests found
%% Cell type:markdown id:0005-c6178e60b944258ad3f127adea03eb4ee0da7c74b1a39b54c9400760909 tags: %% Cell type:markdown id:0005-db440e97cb5c7f546520ed47264b7fce12db0ccfc7c8adb03bca9113aee tags:
# Matrix als 2D-Array # Matrix als 2D-Array
Wir erzeugen in dieser Übung eine Matrix, einen Vektor und führen eine Wir erzeugen in dieser Übung eine Matrix, einen Vektor und führen eine
Matrix-Vektor-Multiplikation durch. Matrix-Vektor-Multiplikation durch.
## a) Matrix erzeugen ## a) Matrix erzeugen
Erstellen Sie ein 2D-NumPy-Array `a` mit `arange` und `reshape` wie Erstellen Sie ein 2D-NumPy-Array `a` mit `arange` und `reshape` wie
dargestellt: dargestellt:
$\begin{bmatrix} 1 & 2 & 3\\ 4 & 5 & 6 \end{bmatrix}$ $\begin{bmatrix}
1 & 2 & 3\\
4 & 5 & 6
\end{bmatrix}$
Hier Ihr Code: Hier Ihr Code:
%% Cell type:code id:0006-44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 tags: %% Cell type:code id:0006-44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 tags:
``` ```
``` ```
%% Cell type:markdown id:0008-1cc6e5f1e34374c41c7c0866c7bc97c9953348cde0fc8ef578593078396 tags: %% Cell type:markdown id:0008-1cc6e5f1e34374c41c7c0866c7bc97c9953348cde0fc8ef578593078396 tags:
### Tests zu a) ### Tests zu a)
Wir testen, ob die Elemente wie erwartet sind: Wir testen, ob die Elemente wie erwartet sind:
%% Cell type:code id:0009-112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb tags: %% Cell type:code id:0009-112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb tags:
``` ```
a a
``` ```
%% Output %% Output
array([[1, 2, 3], array([[1, 2, 3],
[4, 5, 6]]) [4, 5, 6]])
%% Cell type:markdown id:0014-0328546f1dffddc990c09fb5d601b0a937e5de407867597480a75115e3f tags: %% Cell type:markdown id:0014-298594a5981320e04d208dd7d227a173f8a4fa65f04cad0e233cf939a12 tags:
## b) Matrix-Vektor-Multiplikation ## b) Matrix-Vektor-Multiplikation
Erstellen Sie ein 1D-NumPy-Array `v` mit `arange` wie dargestellt: Erstellen Sie ein 1D-NumPy-Array `v` mit `arange` wie dargestellt:
$\begin{bmatrix} 10\\ 8\\ 6 \end{bmatrix}$ $\begin{bmatrix}
10\\
8\\
6
\end{bmatrix}$
Führen Sie die Matrix-Vektor-Multiplikation $a \, v$ durch und speichern Führen Sie die Matrix-Vektor-Multiplikation $a \, v$ durch und speichern
das Ergebnis in `w`! das Ergebnis in `w`!
Hier Ihr Code: Hier Ihr Code:
%% Cell type:code id:0015-44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 tags: %% Cell type:code id:0015-44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 tags:
``` ```
``` ```
%% Cell type:markdown id:0017-992f177dd16a0d1b483ed05e06783dc1801f9c0eacc242e35500af5a238 tags: %% Cell type:markdown id:0017-992f177dd16a0d1b483ed05e06783dc1801f9c0eacc242e35500af5a238 tags:
### Tests zu b) ### Tests zu b)
Wir testen, ob die Elemente von `v` wie erwartet sind: Wir testen, ob die Elemente von `v` wie erwartet sind:
%% Cell type:code id:0018-85e0c21ae6c41ce1dfe7b6bfaceea5ab68e40a2476f50208e526f506080 tags: %% Cell type:code id:0018-85e0c21ae6c41ce1dfe7b6bfaceea5ab68e40a2476f50208e526f506080 tags:
``` ```
v v
``` ```
%% Output %% Output
array([10, 8, 6]) array([10, 8, 6])
%% Cell type:markdown id:0019-1ace5586569a4ff843fe20890c8f950f459c0c0377b3c0578ec86be031d tags: %% Cell type:markdown id:0019-1ace5586569a4ff843fe20890c8f950f459c0c0377b3c0578ec86be031d tags:
Und das Ergebnis der Matrix-Vektor-Multiplikation: Und das Ergebnis der Matrix-Vektor-Multiplikation:
%% Cell type:code id:0020-1e49c013f00c62cf59f2163542a9d8df02464efeb615d31051b0fddc326 tags: %% Cell type:code id:0020-1e49c013f00c62cf59f2163542a9d8df02464efeb615d31051b0fddc326 tags:
``` ```
w w
``` ```
%% Output %% Output
array([ 44, 116]) array([ 44, 116])
%% Cell type:markdown id:0023-95db6bdf5836af7e18d40db1d82afda3c54771e55900ff5af4368f80a6a tags: %% Cell type:markdown id:0023-95db6bdf5836af7e18d40db1d82afda3c54771e55900ff5af4368f80a6a tags:
## c) Sortierung ## c) Sortierung
Sortieren Sie den Vektor `v` mit `np.sort` und speichern das Ergebnis in Sortieren Sie den Vektor `v` mit `np.sort` und speichern das Ergebnis in
`v_sorted`! Schauen Sie sich im Test an, ob es aufsteigend oder `v_sorted`! Schauen Sie sich im Test an, ob es aufsteigend oder
absteigend sortiert ist! Können Sie die Sortierreihenfolge über Slicing absteigend sortiert ist! Können Sie die Sortierreihenfolge über Slicing
umkehren? Versuchen Sie es! umkehren? Versuchen Sie es!
Hier Ihr Code: Hier Ihr Code:
%% Cell type:code id:0024-44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 tags: %% Cell type:code id:0024-44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 tags:
``` ```
``` ```
%% Cell type:markdown id:0028-0df12fdea3eb22d455be855d3463643a0adb3e858fe1e64242c52d75b38 tags: %% Cell type:markdown id:0028-0df12fdea3eb22d455be855d3463643a0adb3e858fe1e64242c52d75b38 tags:
Nun verwenden Sie np.argsort um die Indizes der sortierten Elemente zu Nun verwenden Sie np.argsort um die Indizes der sortierten Elemente zu
erhalten und speichern diese in `v_sorted_indices`! Schauen Sie sich im erhalten und speichern diese in `v_sorted_indices`! Schauen Sie sich im
Test unten an, was passiert, wenn Sie `v_sorted_indices` auf `v` Test unten an, was passiert, wenn Sie `v_sorted_indices` auf `v`
anwenden! anwenden!
*Bonus: Schaffen Sie es, die Spalten von `a` nach der Sortierung von `v` *Bonus: Schaffen Sie es, die Spalten von `a` nach der Sortierung von `v`
zu sortieren?* zu sortieren?*
### Tests zu c) ### Tests zu c)
Der Vektor `v` ist: Der Vektor `v` ist:
%% Cell type:code id:0029-85e0c21ae6c41ce1dfe7b6bfaceea5ab68e40a2476f50208e526f506080 tags: %% Cell type:code id:0029-85e0c21ae6c41ce1dfe7b6bfaceea5ab68e40a2476f50208e526f506080 tags:
``` ```
v v
``` ```
%% Output %% Output
array([10, 8, 6]) array([10, 8, 6])
%% Cell type:markdown id:0030-fa52a44b66f51668e263ae189ef6422d0aa84c1d63c15b993716154ed71 tags: %% Cell type:markdown id:0030-fa52a44b66f51668e263ae189ef6422d0aa84c1d63c15b993716154ed71 tags:
Sortiert: Sortiert:
%% Cell type:code id:0031-fe5508108e9636d2ad10f6c6a611a6fa460ca33e04dda3400c76d4bbe12 tags: %% Cell type:code id:0031-fe5508108e9636d2ad10f6c6a611a6fa460ca33e04dda3400c76d4bbe12 tags:
``` ```
v_sorted v_sorted
``` ```
%% Output %% Output
array([ 6, 8, 10]) array([ 6, 8, 10])
%% Cell type:markdown id:0032-11a98d7fa4c96482460ec065f0faa4197563223281eb451dc5034ccfced tags: %% Cell type:markdown id:0032-11a98d7fa4c96482460ec065f0faa4197563223281eb451dc5034ccfced tags:
Sortierindizes: Sortierindizes:
%% Cell type:code id:0033-fa89420e96785c287fad6b270873c081d43db4779e9a2503ae62bea9003 tags: %% Cell type:code id:0033-fa89420e96785c287fad6b270873c081d43db4779e9a2503ae62bea9003 tags:
``` ```
v_sorted_indices v_sorted_indices
``` ```
%% Output %% Output
array([2, 1, 0]) array([2, 1, 0])
%% Cell type:markdown id:0034-c1108c165d8111c761de5a684ff69c2058d4d52b6c89ba1c589070f56a7 tags: %% Cell type:markdown id:0034-c1108c165d8111c761de5a684ff69c2058d4d52b6c89ba1c589070f56a7 tags:
Und die Anwendung der Sortierindizes auf `v`: Und die Anwendung der Sortierindizes auf `v`:
%% Cell type:code id:0035-f0e4f4e230e723cda122e72eb4cc32c10ac8c30139419ccd2df6a8f01c6 tags: %% Cell type:code id:0035-f0e4f4e230e723cda122e72eb4cc32c10ac8c30139419ccd2df6a8f01c6 tags:
``` ```
v[v_sorted_indices] v[v_sorted_indices]
``` ```
%% Output %% Output
array([ 6, 8, 10]) array([ 6, 8, 10])
%% Cell type:markdown id:0038-60ff5efbf91d48180e27b1e4e4dd3074404e32192dc1356f79296273c72 tags:
## d) Zeile hinzufügen
Fügen Sie $v$ als Zeile zu $a$ hinzu und speichern es in `av`!
Hier Ihr Code:
%% Cell type:code id:0039-44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 tags:
```
```
%% Cell type:markdown id:0041-6c3e8a5629f3b4c854cdac323a8871364284522e5a15f6974a77f00269f tags:
### Tests zu d)
Wir testen, ob die Elemente von `av` wie erwartet sind:
%% Cell type:code id:0042-bca625b223971909dd88fc93faeb050dc5b34d91c0871661740dcfb9d18 tags:
```
av
```
%% Output
array([[ 1, 2, 3],
[ 4, 5, 6],
[10, 8, 6]])
......
%% Cell type:markdown id:0005-d2ed2a9b5930bbb53dab5d18ab5a1c4bcaabe44815e106bcb42bb7411c2 tags:
# Mittlere Temperaturen
Die Funktion `load_temp` lädt die mittlere Monatstemperaturen von Januar
2005 bis August 2023 von der Wetterstation 01303 (Essen-Bredeney) als
NumPy-Array:
| 0: Jahr | 1: Monat | 2: Temperatur in K |
|--------:|---------:|-------------------:|
| 2005 | 1 | 277.02 |
| 2005 | 2 | 274.15 |
| 2005 | 3 | 279.44 |
| … | … | … |
| 2023 | 7 | 291.75 |
| 2023 | 8 | 291.18 |
Mitteln Sie die Temperaturen für…
1. …die Monate über alle Jahre und speichern es in `month_mean`. So
erhalten Sie beispielsweise die mittlere Temperatur im Januar
(unabhängig vom Jahr). Plotten Sie die Ergebnisse.
2. …die Jahre über alle Monate und speichern es in `year_mean`. So
erhalten Sie beispielsweise die mittlere Temperatur im Jahr 2005
(unabhängig vom Monat). Plotten Sie die Ergebnisse.
Hier Ihr Startcode:
%% Cell type:code id:0006-e4d3cff1c8267ff2b520c715c7e3fb808d00dc6a5155c21ece66a06e444 tags:
```
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
def load_temp():
FILE_PATH = 'dwd_data-2023-08-31.parquet.zst'
dwd_data = pd.read_parquet(FILE_PATH)
station_ind = dwd_data['station_id'] == '01303'
param_ind = dwd_data['parameter'] == 'temperature_air_mean_200'
dwd_data = dwd_data[station_ind & param_ind]
dwd_data['year'] = dwd_data['date'].dt.year
dwd_data['month'] = dwd_data['date'].dt.month
return dwd_data[['year', 'month', 'value']].to_numpy()
temp = load_temp()
```
%% Cell type:markdown id:0008-539fc374ab04b1689d3d56775fe49569971d6ae370acf0fb866780c7864 tags:
## Tests
Wir schauen mal, ob die `shape` passt:
%% Cell type:code id:0009-bcadab89753cff51d9c3ccf5822c5cd62857e16f60b147f35e7b6f32dfa tags:
```
np.shape(month_mean)
```
%% Output
(12,)
%% Cell type:markdown id:0010-df2a515e50faefff59e6b552fa4caa1ab108f7d3c2098a41c24ee3680d6 tags:
Der Mittelwert für Januar sollte ca. 276.276 K betragen:
%% Cell type:code id:0011-91b4879873e05a15752b382e6910b0f9907260a15a24e461078caa00fac tags:
```
print(f'{month_mean[0]:.3f} K')
```
%% Output
276.276 K
%% Cell type:markdown id:0012-1851b721844dfa31100516a6bdf306ffb883139d381e456ac704cab86a3 tags:
Der Mittelwert für 2005 sollte ca. 283.485 K betragen:
%% Cell type:code id:0013-0d97c8b776aa3b2fe55e04bb02e3c8f8b31bc133c4aea242af15ff8d9cd tags:
```
print(f'{year_mean[0]:.3f} K')
```
%% Output
283.485 K
%% Cell type:markdown id:0005-c6178e60b944258ad3f127adea03eb4ee0da7c74b1a39b54c9400760909 tags: %% Cell type:markdown id:0005-db440e97cb5c7f546520ed47264b7fce12db0ccfc7c8adb03bca9113aee tags:
# Matrix als 2D-Array # Matrix als 2D-Array
Wir erzeugen in dieser Übung eine Matrix, einen Vektor und führen eine Wir erzeugen in dieser Übung eine Matrix, einen Vektor und führen eine
Matrix-Vektor-Multiplikation durch. Matrix-Vektor-Multiplikation durch.
## a) Matrix erzeugen ## a) Matrix erzeugen
Erstellen Sie ein 2D-NumPy-Array `a` mit `arange` und `reshape` wie Erstellen Sie ein 2D-NumPy-Array `a` mit `arange` und `reshape` wie
dargestellt: dargestellt:
$\begin{bmatrix} 1 & 2 & 3\\ 4 & 5 & 6 \end{bmatrix}$ $\begin{bmatrix}
1 & 2 & 3\\
4 & 5 & 6
\end{bmatrix}$
Hier Ihr Code: Hier Ihr Code:
%% Cell type:code id:0006-44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 tags: %% Cell type:code id:0006-44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 tags:
``` ```
``` ```
%% Cell type:markdown id:0008-3ecf6e6b5ab63e42f08e072a90d315657776722faefa171a4c5a4bf408b tags: %% Cell type:markdown id:0008-3ecf6e6b5ab63e42f08e072a90d315657776722faefa171a4c5a4bf408b tags:
### Lösung zu a) ### Lösung zu a)
Wir erstellen einen Vektor von 1, …, 7 (ohne 7) und führen ein `reshape` Wir erstellen einen Vektor von 1, …, 7 (ohne 7) und führen ein `reshape`
auf $2 \times 3$ durch um das geforderte Array zu erhalten. auf $2 \times 3$ durch um das geforderte Array zu erhalten.
%% Cell type:code id:0009-e4b6c21541fce42f2f2254a5e852efd31e50df101e190790c5cd7b090ec tags: %% Cell type:code id:0009-e4b6c21541fce42f2f2254a5e852efd31e50df101e190790c5cd7b090ec tags:
``` ```
import numpy as np import numpy as np
a = np.arange(1, 7).reshape((2, 3)) a = np.arange(1, 7).reshape((2, 3))
``` ```
%% Cell type:markdown id:0011-1cc6e5f1e34374c41c7c0866c7bc97c9953348cde0fc8ef578593078396 tags: %% Cell type:markdown id:0011-1cc6e5f1e34374c41c7c0866c7bc97c9953348cde0fc8ef578593078396 tags:
### Tests zu a) ### Tests zu a)
Wir testen, ob die Elemente wie erwartet sind: Wir testen, ob die Elemente wie erwartet sind:
%% Cell type:code id:0012-112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb tags: %% Cell type:code id:0012-112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb tags:
``` ```
a a
``` ```
%% Output %% Output
array([[1, 2, 3], array([[1, 2, 3],
[4, 5, 6]]) [4, 5, 6]])
%% Cell type:markdown id:0017-0328546f1dffddc990c09fb5d601b0a937e5de407867597480a75115e3f tags: %% Cell type:markdown id:0017-298594a5981320e04d208dd7d227a173f8a4fa65f04cad0e233cf939a12 tags:
## b) Matrix-Vektor-Multiplikation ## b) Matrix-Vektor-Multiplikation
Erstellen Sie ein 1D-NumPy-Array `v` mit `arange` wie dargestellt: Erstellen Sie ein 1D-NumPy-Array `v` mit `arange` wie dargestellt:
$\begin{bmatrix} 10\\ 8\\ 6 \end{bmatrix}$ $\begin{bmatrix}
10\\
8\\
6
\end{bmatrix}$
Führen Sie die Matrix-Vektor-Multiplikation $a \, v$ durch und speichern Führen Sie die Matrix-Vektor-Multiplikation $a \, v$ durch und speichern
das Ergebnis in `w`! das Ergebnis in `w`!
Hier Ihr Code: Hier Ihr Code:
%% Cell type:code id:0018-44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 tags: %% Cell type:code id:0018-44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 tags:
``` ```
``` ```
%% Cell type:markdown id:0020-babf4709a23502cf9119e5bb5cce3c40af6d20decb15606ae4514709347 tags: %% Cell type:markdown id:0020-babf4709a23502cf9119e5bb5cce3c40af6d20decb15606ae4514709347 tags:
### Lösung zu b) ### Lösung zu b)
Wir erstellen den Vektor von 10, …, 5 mit negativer Schrittweite -2. Wir erstellen den Vektor von 10, …, 5 mit negativer Schrittweite -2.
%% Cell type:code id:0021-4e8d763959efa25db7e48a520463917283a0207d03032bb1fdc4fc21dcc tags: %% Cell type:code id:0021-4e8d763959efa25db7e48a520463917283a0207d03032bb1fdc4fc21dcc tags:
``` ```
v = np.arange(10, 5, -2) v = np.arange(10, 5, -2)
``` ```
%% Cell type:markdown id:0022-38706663a0a925df41ae4d5761e58c8cc60171cb95935c0e2f0995441f2 tags: %% Cell type:markdown id:0022-38706663a0a925df41ae4d5761e58c8cc60171cb95935c0e2f0995441f2 tags:
Nun führen wir die Matrix-Vektor-Multiplikation durch. Nun führen wir die Matrix-Vektor-Multiplikation durch.
%% Cell type:code id:0023-d45b03c5a5db93eaafa612535b471de9d8e9ba8a32f5b2761a5aa2f51d6 tags: %% Cell type:code id:0023-d45b03c5a5db93eaafa612535b471de9d8e9ba8a32f5b2761a5aa2f51d6 tags:
``` ```
w = a @ v w = a @ v
``` ```
%% Cell type:markdown id:0025-992f177dd16a0d1b483ed05e06783dc1801f9c0eacc242e35500af5a238 tags: %% Cell type:markdown id:0025-992f177dd16a0d1b483ed05e06783dc1801f9c0eacc242e35500af5a238 tags:
### Tests zu b) ### Tests zu b)
Wir testen, ob die Elemente von `v` wie erwartet sind: Wir testen, ob die Elemente von `v` wie erwartet sind:
%% Cell type:code id:0026-85e0c21ae6c41ce1dfe7b6bfaceea5ab68e40a2476f50208e526f506080 tags: %% Cell type:code id:0026-85e0c21ae6c41ce1dfe7b6bfaceea5ab68e40a2476f50208e526f506080 tags:
``` ```
v v
``` ```
%% Output %% Output
array([10, 8, 6]) array([10, 8, 6])
%% Cell type:markdown id:0027-1ace5586569a4ff843fe20890c8f950f459c0c0377b3c0578ec86be031d tags: %% Cell type:markdown id:0027-1ace5586569a4ff843fe20890c8f950f459c0c0377b3c0578ec86be031d tags:
Und das Ergebnis der Matrix-Vektor-Multiplikation: Und das Ergebnis der Matrix-Vektor-Multiplikation:
%% Cell type:code id:0028-1e49c013f00c62cf59f2163542a9d8df02464efeb615d31051b0fddc326 tags: %% Cell type:code id:0028-1e49c013f00c62cf59f2163542a9d8df02464efeb615d31051b0fddc326 tags:
``` ```
w w
``` ```
%% Output %% Output
array([ 44, 116]) array([ 44, 116])
%% Cell type:markdown id:0031-95db6bdf5836af7e18d40db1d82afda3c54771e55900ff5af4368f80a6a tags: %% Cell type:markdown id:0031-95db6bdf5836af7e18d40db1d82afda3c54771e55900ff5af4368f80a6a tags:
## c) Sortierung ## c) Sortierung
Sortieren Sie den Vektor `v` mit `np.sort` und speichern das Ergebnis in Sortieren Sie den Vektor `v` mit `np.sort` und speichern das Ergebnis in
`v_sorted`! Schauen Sie sich im Test an, ob es aufsteigend oder `v_sorted`! Schauen Sie sich im Test an, ob es aufsteigend oder
absteigend sortiert ist! Können Sie die Sortierreihenfolge über Slicing absteigend sortiert ist! Können Sie die Sortierreihenfolge über Slicing
umkehren? Versuchen Sie es! umkehren? Versuchen Sie es!
Hier Ihr Code: Hier Ihr Code:
%% Cell type:code id:0032-44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 tags: %% Cell type:code id:0032-44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 tags:
``` ```
``` ```
%% Cell type:markdown id:0036-eaceadf3fc5eb1dc3b7e431fc79499ba646e7d6c2ad4506f0bb5dfee218 tags: %% Cell type:markdown id:0036-eaceadf3fc5eb1dc3b7e431fc79499ba646e7d6c2ad4506f0bb5dfee218 tags:
Nun verwenden Sie np.argsort um die Indizes der sortierten Elemente zu Nun verwenden Sie np.argsort um die Indizes der sortierten Elemente zu
erhalten und speichern diese in `v_sorted_indices`! Schauen Sie sich im erhalten und speichern diese in `v_sorted_indices`! Schauen Sie sich im
Test unten an, was passiert, wenn Sie `v_sorted_indices` auf `v` Test unten an, was passiert, wenn Sie `v_sorted_indices` auf `v`
anwenden! anwenden!
*Bonus: Schaffen Sie es, die Spalten von `a` nach der Sortierung von `v` *Bonus: Schaffen Sie es, die Spalten von `a` nach der Sortierung von `v`
zu sortieren?* zu sortieren?*
### Lösung zu c) ### Lösung zu c)
Zunächst sortieren wir den Vektor `v` aufsteigend und absteigend. Wir Zunächst sortieren wir den Vektor `v` aufsteigend und absteigend. Wir
können die Sortierreihenfolge umkehren, indem wir mit negativer können die Sortierreihenfolge umkehren, indem wir mit negativer
Schrittweite slicen. Schrittweite slicen.
%% Cell type:code id:0037-4a6d98a7ec96685ce5f477cc14db5ba7f2da27c9b82e2695e8a3d523b29 tags: %% Cell type:code id:0037-4a6d98a7ec96685ce5f477cc14db5ba7f2da27c9b82e2695e8a3d523b29 tags:
``` ```
v_sorted = np.sort(v) # ascending (aufsteigend) v_sorted = np.sort(v) # ascending (aufsteigend)
v_sorted_reversed = np.sort(v)[::-1] # descending (absteigend) v_sorted_reversed = np.sort(v)[::-1] # descending (absteigend)
``` ```
%% Cell type:markdown id:0038-27837dafe02bffae4f451b45bf240087053d24ec642144cc73ea2a37fe0 tags: %% Cell type:markdown id:0038-27837dafe02bffae4f451b45bf240087053d24ec642144cc73ea2a37fe0 tags:
Die Absteigende Sortierung ist natürlich langweilig, weil es die Die Absteigende Sortierung ist natürlich langweilig, weil es die
ursprüngliche Reihenfolge ist. Nun führen wir die ursprüngliche Reihenfolge ist. Nun führen wir die
Matrix-Vektor-Multiplikation durch. Matrix-Vektor-Multiplikation durch.
%% Cell type:code id:0039-9ff970c568dd84250d1699058e82096ed5be1a0f584a46884def166f8ec tags: %% Cell type:code id:0039-9ff970c568dd84250d1699058e82096ed5be1a0f584a46884def166f8ec tags:
``` ```
v_sorted_reversed v_sorted_reversed
``` ```
%% Output %% Output
array([10, 8, 6]) array([10, 8, 6])
%% Cell type:markdown id:0040-f30aad78b36f2c5f31a3c61a51c55c9e43b54b9aa9b4399b0750a26e220 tags: %% Cell type:markdown id:0040-f30aad78b36f2c5f31a3c61a51c55c9e43b54b9aa9b4399b0750a26e220 tags:
Nun verwenden wir `argsort` um die Indizes der sortierten Elemente zu Nun verwenden wir `argsort` um die Indizes der sortierten Elemente zu
erhalten und speichern diese in `v_sorted_indices`. Man sieht im Test, erhalten und speichern diese in `v_sorted_indices`. Man sieht im Test,
dass die Anwendung der Sortierindizes auf `v` das gleiche Ergebnis wie dass die Anwendung der Sortierindizes auf `v` das gleiche Ergebnis wie
`v_sorted` liefert. Für die Bonusaufgabe wenden wir die Sortierindizes `v_sorted` liefert. Für die Bonusaufgabe wenden wir die Sortierindizes
auf die Spalten von `a` an. Allgemein lassen sich so zwei Arrays auf die Spalten von `a` an. Allgemein lassen sich so zwei Arrays
gleichartig sortieren, z. B. $y$-Werte nach den entsprechenden gleichartig sortieren, z. B. $y$-Werte nach den entsprechenden
$x$-Werten. $x$-Werten.
%% Cell type:code id:0041-2443864e0527e20381f777a9b3c01dd0380b4046bcd7b457ed89fedbf1f tags: %% Cell type:code id:0041-2443864e0527e20381f777a9b3c01dd0380b4046bcd7b457ed89fedbf1f tags:
``` ```
v_sorted_indices = np.argsort(v) v_sorted_indices = np.argsort(v)
a_sorted = a[:, v_sorted_indices] a_sorted = a[:, v_sorted_indices]
``` ```
%% Cell type:code id:0042-00c0156accd3cd62646f7445303d5958f50202e08b93250d21117e0e0bf tags: %% Cell type:code id:0042-00c0156accd3cd62646f7445303d5958f50202e08b93250d21117e0e0bf tags:
``` ```
a_sorted a_sorted
``` ```
%% Output %% Output
array([[3, 2, 1], array([[3, 2, 1],
[6, 5, 4]]) [6, 5, 4]])
%% Cell type:markdown id:0044-23fffe701d76dc191fa3759ad4ad76eb59b720f4c3ef33d11e45e75011f tags: %% Cell type:markdown id:0044-23fffe701d76dc191fa3759ad4ad76eb59b720f4c3ef33d11e45e75011f tags:
### Tests zu c) ### Tests zu c)
Der Vektor `v` ist: Der Vektor `v` ist:
%% Cell type:code id:0045-85e0c21ae6c41ce1dfe7b6bfaceea5ab68e40a2476f50208e526f506080 tags: %% Cell type:code id:0045-85e0c21ae6c41ce1dfe7b6bfaceea5ab68e40a2476f50208e526f506080 tags:
``` ```
v v
``` ```
%% Output %% Output
array([10, 8, 6]) array([10, 8, 6])
%% Cell type:markdown id:0046-fa52a44b66f51668e263ae189ef6422d0aa84c1d63c15b993716154ed71 tags: %% Cell type:markdown id:0046-fa52a44b66f51668e263ae189ef6422d0aa84c1d63c15b993716154ed71 tags:
Sortiert: Sortiert:
%% Cell type:code id:0047-fe5508108e9636d2ad10f6c6a611a6fa460ca33e04dda3400c76d4bbe12 tags: %% Cell type:code id:0047-fe5508108e9636d2ad10f6c6a611a6fa460ca33e04dda3400c76d4bbe12 tags:
``` ```
v_sorted v_sorted
``` ```
%% Output %% Output
array([ 6, 8, 10]) array([ 6, 8, 10])
%% Cell type:markdown id:0048-11a98d7fa4c96482460ec065f0faa4197563223281eb451dc5034ccfced tags: %% Cell type:markdown id:0048-11a98d7fa4c96482460ec065f0faa4197563223281eb451dc5034ccfced tags:
Sortierindizes: Sortierindizes:
%% Cell type:code id:0049-fa89420e96785c287fad6b270873c081d43db4779e9a2503ae62bea9003 tags: %% Cell type:code id:0049-fa89420e96785c287fad6b270873c081d43db4779e9a2503ae62bea9003 tags:
``` ```
v_sorted_indices v_sorted_indices
``` ```
%% Output %% Output
array([2, 1, 0]) array([2, 1, 0])
%% Cell type:markdown id:0050-c1108c165d8111c761de5a684ff69c2058d4d52b6c89ba1c589070f56a7 tags: %% Cell type:markdown id:0050-c1108c165d8111c761de5a684ff69c2058d4d52b6c89ba1c589070f56a7 tags:
Und die Anwendung der Sortierindizes auf `v`: Und die Anwendung der Sortierindizes auf `v`:
%% Cell type:code id:0051-f0e4f4e230e723cda122e72eb4cc32c10ac8c30139419ccd2df6a8f01c6 tags: %% Cell type:code id:0051-f0e4f4e230e723cda122e72eb4cc32c10ac8c30139419ccd2df6a8f01c6 tags:
``` ```
v[v_sorted_indices] v[v_sorted_indices]
``` ```
%% Output %% Output
array([ 6, 8, 10]) array([ 6, 8, 10])
%% Cell type:markdown id:0054-60ff5efbf91d48180e27b1e4e4dd3074404e32192dc1356f79296273c72 tags:
## d) Zeile hinzufügen
Fügen Sie $v$ als Zeile zu $a$ hinzu und speichern es in `av`!
Hier Ihr Code:
%% Cell type:code id:0055-44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 tags:
```
```
%% Cell type:markdown id:0057-97452acebf5b4c664fe1476c7982190acc0b2e6dcb4126eab30867457f1 tags:
### Lösung zu d)
Wir verwenden `np.vstack` um die Zeile `v` zu `a` hinzuzufügen. Das
Ergebnis ist ein $3 \times 3$-Array.
%% Cell type:code id:0058-7137f073beec5783a38b5737aa69b976bdd4863d0afc94e6cc871586665 tags:
```
av = np.vstack((a, v))
```
%% Cell type:markdown id:0060-6c3e8a5629f3b4c854cdac323a8871364284522e5a15f6974a77f00269f tags:
### Tests zu d)
Wir testen, ob die Elemente von `av` wie erwartet sind:
%% Cell type:code id:0061-bca625b223971909dd88fc93faeb050dc5b34d91c0871661740dcfb9d18 tags:
```
av
```
%% Output
array([[ 1, 2, 3],
[ 4, 5, 6],
[10, 8, 6]])
......
%% Cell type:markdown id:0005-d2ed2a9b5930bbb53dab5d18ab5a1c4bcaabe44815e106bcb42bb7411c2 tags:
# Mittlere Temperaturen
Die Funktion `load_temp` lädt die mittlere Monatstemperaturen von Januar
2005 bis August 2023 von der Wetterstation 01303 (Essen-Bredeney) als
NumPy-Array:
| 0: Jahr | 1: Monat | 2: Temperatur in K |
|--------:|---------:|-------------------:|
| 2005 | 1 | 277.02 |
| 2005 | 2 | 274.15 |
| 2005 | 3 | 279.44 |
| … | … | … |
| 2023 | 7 | 291.75 |
| 2023 | 8 | 291.18 |
Mitteln Sie die Temperaturen für…
1. …die Monate über alle Jahre und speichern es in `month_mean`. So
erhalten Sie beispielsweise die mittlere Temperatur im Januar
(unabhängig vom Jahr). Plotten Sie die Ergebnisse.
2. …die Jahre über alle Monate und speichern es in `year_mean`. So
erhalten Sie beispielsweise die mittlere Temperatur im Jahr 2005
(unabhängig vom Monat). Plotten Sie die Ergebnisse.
Hier Ihr Startcode:
%% Cell type:code id:0006-e4d3cff1c8267ff2b520c715c7e3fb808d00dc6a5155c21ece66a06e444 tags:
```
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
def load_temp():
FILE_PATH = 'dwd_data-2023-08-31.parquet.zst'
dwd_data = pd.read_parquet(FILE_PATH)
station_ind = dwd_data['station_id'] == '01303'
param_ind = dwd_data['parameter'] == 'temperature_air_mean_200'
dwd_data = dwd_data[station_ind & param_ind]
dwd_data['year'] = dwd_data['date'].dt.year
dwd_data['month'] = dwd_data['date'].dt.month
return dwd_data[['year', 'month', 'value']].to_numpy()
temp = load_temp()
```
%% Cell type:markdown id:0008-2cd25c8798f51f8e5a6c713c29b493ac19b894f0ed5571805f0e364e845 tags:
## Lösung
Um für alle Monate (Spalte 1) die mittlere Temperatur (Spalte 2) zu
berechnen, erstellen wir zunächst eine Sequenz von 1 bis 12. Dann
verwenden wir eine List Comprehension um für jeden Monat die mittlere
Temperatur zu berechnen. Dabei ergibt `temp[:, 1] == month` einen
booleschen Vektor, der angibt, ob die Zeile zu dem Monat gehört. Mit
`temp[temp[:, 1] == month, 2]` erhalten wir dann alle Temperaturen für
den Monat, die wir mit `np.mean(...)` mitteln.
%% Cell type:code id:0009-a1253165c038b338462cc82eb29e2f7c48a4a9fc2d4445491a01a7c03c4 tags:
```
all_months = range(1, 13)
month_mean = [np.mean(temp[temp[:, 1] == month, 2]) for month in all_months]
```
%% Cell type:markdown id:0010-ecadd0c3a7487df23a98b0962f4f82f4be5e1843bc8ae8e7e27ef69f618 tags:
Das Ergebnis plotten wir ganz einfach mit:
%% Cell type:code id:0011-3a213d48af32df5375e47a6ecccc9845858537761ddb421498a332a8fb0 tags:
```
plt.figure()
plt.plot(month_mean)
```
%% Cell type:markdown id:0012-3ee0a3d69a51adfd7eaf1f4213775cd4d7d7715664ece17e6e89b6ed8fb tags:
Um für alle Jahre (Spalte 0) die mittlere Temperatur (Spalte 2) zu
berechnen, verwenden wir eine ähnliche List Comprehension. Wir verwenden
`np.unique` um die Jahre sortiert zu extrahieren. Das ergibt einfach
eine Sequenz von 2005 bis 2023. Der Aufruf von `astype(int)` wandelt die
Werte in Integer um, ist aber nicht wichtig. Vor der Mittelung filtern
wir 2023 weg, weil es unvollständig ist und der Mittelwert zu hoch wäre,
da die kalten Temperaturen von September bis Dezember fehlen würden.
Auch dafür hätte man wieder eine `range(2005, 2023)` verwenden können.
%% Cell type:code id:0013-ca8699b005a925df38cf6316af64aaf256f49174a83f449e6b447b1cf19 tags:
```
all_years = np.unique(temp[:, 0]).astype(int)
all_years = all_years[all_years < 2023]
year_mean = [np.mean(temp[temp[:, 0] == year, 2]) for year in all_years]
```
%% Cell type:markdown id:0014-ecadd0c3a7487df23a98b0962f4f82f4be5e1843bc8ae8e7e27ef69f618 tags:
Das Ergebnis plotten wir ganz einfach mit:
%% Cell type:code id:0015-a42d856cfe30a9bcf7f2c514ee6b65372103e8818cf5eb0a0e17d6e6d69 tags:
```
plt.figure()
plt.plot(all_years, year_mean)
```
%% Cell type:markdown id:0016-ed8aabb9d71daa8b180cb6773528e73ff5928d72d7ea8b8e83f7439fc1a tags:
Wenn wir nicht wüssten, ob noch weitere Jahre außer 2023 unvollständig
sind, könnten wir bei `np.unique` auch `return_counts=True` verwenden:
%% Cell type:code id:0017-d45e342d4be912931cb0a80ee62eec2a2377fb20ca59fea9ea11428f6dd tags:
```
all_years, counts = np.unique(temp[:, 0], return_counts=True)
counts
```
%% Output
array([12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 8])
%% Cell type:markdown id:0018-59550f7dd84c46441758b975aa0b718731fbdc69f9992e9aff1daa99955 tags:
Nun lassen sich die Jahre mit weniger als 12 Monaten einfach
herausfiltern:
%% Cell type:code id:0019-c5dafbe42aea1dcd7419a1e90abdede4001c4eb471ff52286729745fd4b tags:
```
all_years = all_years[counts == 12]
```
%% Cell type:markdown id:0021-539fc374ab04b1689d3d56775fe49569971d6ae370acf0fb866780c7864 tags:
## Tests
Wir schauen mal, ob die `shape` passt:
%% Cell type:code id:0022-bcadab89753cff51d9c3ccf5822c5cd62857e16f60b147f35e7b6f32dfa tags:
```
np.shape(month_mean)
```
%% Output
(12,)
%% Cell type:markdown id:0023-df2a515e50faefff59e6b552fa4caa1ab108f7d3c2098a41c24ee3680d6 tags:
Der Mittelwert für Januar sollte ca. 276.276 K betragen:
%% Cell type:code id:0024-91b4879873e05a15752b382e6910b0f9907260a15a24e461078caa00fac tags:
```
print(f'{month_mean[0]:.3f} K')
```
%% Output
276.276 K
%% Cell type:markdown id:0025-1851b721844dfa31100516a6bdf306ffb883139d381e456ac704cab86a3 tags:
Der Mittelwert für 2005 sollte ca. 283.485 K betragen:
%% Cell type:code id:0026-0d97c8b776aa3b2fe55e04bb02e3c8f8b31bc133c4aea242af15ff8d9cd tags:
```
print(f'{year_mean[0]:.3f} K')
```
%% Output
283.485 K
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment