Mehrdimensionale Daten

3.2.5. Mehrdimensionale Daten#

Die von Modul numpy bereitgestellten Arrays können mehrdimensional sein. Beispielsweise können so mehrere eindimensionale Datensätze oder mehrdimensionale Daten in einer Datenstruktur gespeichert werden.

import numpy as np
np.set_printoptions(precision=2, linewidth=65)

import matplotlib.pyplot as plt
plt.rc('figure', dpi=150)

Zugriff#

Dabei erfolg der Zugriff auf die Daten entsprechend nicht mehr über einen einzelnen Index, sondern über mehrere, welche mit einem Komma , getrennt werden.

N = 10
daten = np.ones((10, 3))
print( daten )
[[1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]]

Genauso wie bei den verschachtelten Listen, gibt der erste Index die Unterstruktur, hier die Arrays mit drei Elementen, an. Der Zweite entsprechend den Index innerhalb des kurzen Arrays.

daten[0,2] = 5
print( daten )
[[1. 1. 5.]
 [1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]]
daten[1,:] = 2
print( daten )
[[1. 1. 5.]
 [2. 2. 2.]
 [1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]]
daten[:, 1] = -1
print( daten )
[[ 1. -1.  5.]
 [ 2. -1.  2.]
 [ 1. -1.  1.]
 [ 1. -1.  1.]
 [ 1. -1.  1.]
 [ 1. -1.  1.]
 [ 1. -1.  1.]
 [ 1. -1.  1.]
 [ 1. -1.  1.]
 [ 1. -1.  1.]]

2D-Visualisierung#

Zur Darstellung von zweidimensionalen Daten kann die plt.imshow-Funktion verwendet werden. Zunächst wird die Beispieldatei irdata.csv eingelesen. Sie enthält Temperaturwerte, welche mit einer Thermographikamera aufgezeichnet wurden.

data = np.loadtxt('irdata.csv', delimiter=',')
print( "Form:", data.shape )
print( "Daten:", data )
Form: (768, 1024)
Daten: [[20.76 20.69 20.71 ... 17.38 17.39 17.31]
 [20.72 20.71 20.62 ... 17.34 17.38 17.33]
 [20.61 20.72 20.66 ... 17.34 17.36 17.32]
 ...
 [16.27 16.23 16.25 ... 17.01 17.07 16.98]
 [16.37 16.31 16.17 ... 17.02 17.02 16.98]
 [16.32 16.33 16.13 ... 17.03 17.04 16.99]]

Die Visualisierung dieses Datensatzes und der dazugehörigen Farbskala kann mit den Funktionen plt.imshow und plt.colorbar erzielt werden.

plt.imshow(data)
plt.colorbar(label="Temperatur / °C");
../../../_images/9d64dc87b52b2eb73336d4446d899548ac3fa9070b223c23efe29361d6286268.png

Hierbei ist es möglich beispielsweise den Maximalwert der Darstellung (Argument vmax) anzupassen und eine horizontale Linie (plt.axhline) einzuzeichnen. Wie bei den eindimensionalen Graphiken, kann die plt.grid-Funktion ein Gitter erzeugen.

y0 = 380

plt.imshow(data, vmax=30)
plt.axhline(y=y0, color='red')
plt.grid()
plt.colorbar();
../../../_images/8b5c56c41e5887ec206e4bcf37466c0324391e0516233f776452d55abc6218dd.png

Da es sich bei den Daten um Array handelt, ist eine Einschränkung auf bestimmte Bereiche des Datensatzes, hier ein horizontaler Streifen mit der Breite von 200 Punkten um die obige Linie, möglich.

plt.imshow(data[y0-100:y0+100, :], vmax=30)
plt.axhline(y=100, color='red');
# plt.colorbar();
../../../_images/331a15910a86aa733d85ec85985075ebf599ce8e096675f17289b678eca117b1.png

Zur Veranschaulichung des Wertverlaufs sind eindimensionale Graphiken besser geeignet. Ein Schnitt, d.h. die Festlegung eines Index, kann hierfür verwendet werden. In diesem Beispiel werden die Werte entlang der roten Linie in den obigen Bildern dargestellt.

plt.plot(data[y0, :])
plt.xlabel('Position / Pixel')
plt.ylabel('Temperatur / °C')
plt.grid();
../../../_images/04397bfe3ffe2a4a2c7a5a01691c0a38f08d856a089b0e0cefbb3e8388d37ad7.png