3.4. Temperaturdaten II#

In dieser Aufgabe betrachten wir nochmal die Probleme aus Aufgabe 2.11, nur dass durch die Verwendung von numpy diese wesentlich vereinfacht werden.

Eine Tabelle mit allen Messdaten des Experiments ist gespeichert in der Datei TC_all.csv.

Aufgabenstellung#

  1. Benutzen Sie np.loadtxt() um die Daten aus der Datei in einem numpy Array zu speichern.

  2. Verwenden Sie np.mean() und np.amax() um jeweils in einer Zeile die mittlere und maximale Temperatur pro Zeitschritt zu bestimmen.

  3. Geben Sie beide Arrays aus. Was müssen sie tun, um die gesamten Arrays betrachten zu können?

  4. Erstellen Sie mithilfe von plt.imshow(np.ndarray, cmap='hot') eine Heatmap der Temperaturdaten. Wieso erkennen Sie nichts?

  5. Reskalieren Sie ihre Graphik und verwenden Sie nur eine sinnvolle Auswahl der Messwerte, um einen lesbaren Plot zu erhalten.

  6. Was haben Sie hier veranschaulicht?

Lösungshinweise#

zu 2.: Schlagen sie die Methoden, in den Dokumentationen von Numpy und nach und verstehen Sie, wie Sie mean und max entlang unterschiedlicher Achsen von numpy Arrays finden.

zu 5.: Ihre Graphik könnte wie folgt aussehen:

../../../../_images/5e0b99d1ba4bd4e548b6aa7d1a5e2449bf676341c321c2ddef06f402967d87ed.png

Lösungsvorschlag#

Hide code cell content
import numpy as np
import matplotlib.pyplot as plt

# laden der csv datei
data = np.loadtxt('TC_all.csv', delimiter=',')

# wähle zum Visualisieren nur jede 20. Messung
steps = 20
cropped_data = data[0::steps]

# plotte den zeitlichen Verlauf der Wärmeausbreitung im Stahlträger als Heatmap
plt.figure(figsize=(10,2))
plt.imshow(cropped_data.transpose(), cmap='hot')

# plottet die Farbkodierung und gibt eine Referenz zu dieser zurück
cbar = plt.colorbar()
cbar.set_label('Temperature in °C')

plt.xticks()
plt.xlabel(f't / {steps}s')
plt.ylabel('Thermometer ID')
plt.title('zeitlicher Verlauf der Wärmeausbreitung in einem Stahlträger')
plt.show()

dmax = np.amax(data, 1)
print(f'Maximale Temperatur pro Zeitschritt: {dmax}')
dmean = np.mean(data, 1)
print(f'Mittlere Temperatur pro Zeitschritt: {dmean}')

# um ein 1D-Array komplett auszugeben reicht ein Cast auf eine Liste
print(f'Maximale Temperatur pro Zeitschritt als Liste:\n{list(np.amax(cropped_data, 1))}')
../../../../_images/5e0b99d1ba4bd4e548b6aa7d1a5e2449bf676341c321c2ddef06f402967d87ed.png
Maximale Temperatur pro Zeitschritt: [26.  26.  27.6 ... 25.6 25.6 25.5]
Mittlere Temperatur pro Zeitschritt: [22.41666667 22.4        22.53333333 ... 25.09166667 25.08333333
 25.06666667]
Maximale Temperatur pro Zeitschritt als Liste:
[26.0, 35.4, 45.7, 54.4, 62.0, 69.7, 75.7, 81.1, 86.9, 92.2, 96.2, 100.6, 104.4, 107.8, 111.1, 112.0, 105.1, 98.4, 91.4, 85.9, 80.4, 75.9, 72.6, 68.7, 66.1, 63.3, 60.8, 58.8, 56.1, 54.1, 52.3, 51.0, 49.5, 48.0, 46.6, 45.3, 44.3, 43.2, 42.2, 41.3, 40.3, 39.4, 38.6, 37.9, 37.2, 36.5, 35.9, 35.2, 34.6, 34.1, 33.6, 33.1, 32.6, 32.2, 31.8, 31.4, 31.0, 30.7, 30.4, 30.0, 29.7, 29.3, 28.9, 28.7, 28.3, 28.0, 27.7, 27.5, 27.2, 27.0, 26.7, 26.5, 26.3, 26.0, 25.8, 25.6]