2.12. NumPy Arrays#
In dieser Übung sollen die Unterschiede zwischen Listen und NumPy Arrays untersucht werden. Daraus ergibt sich das Verständnis in welchen Situation welches Datenkonstrukt sinnvoll eingesetzt werden kann. Darauf folgend soll das Zugreifen auf ein Array geübt werden. Im letzten Teil wird der Umgang mit Arrays weiter vertieft.
Aufgabenteil A - Verständnis, Operatoren#
Erstellen Sie ein NumPy Array mit den Zahlen 0 - 9 nach folgenden Methoden:
konvertieren Sie eine Liste in ein Array
konvertieren Sie eine Range in ein Array
Nutzen Sie die
arange
Funktion vom NumPy-Modul und vergleichen Sie diese mit Range
Vergleichen Sie folgende Operatoren zwischen Listen und Arrays und ermitteln Sie die Unterschiede:
addieren/subtrahieren Sie zwei Listen bzw. Arrays
addieren Sie eine Zahl
multiplizieren/dividieren Sie mit eine Zahl
Beantworten Sie folgende Fragen und begründen Sie Ihre Antwort. Überprüfen Sie diese gegebenenfalls.
Ist es möglich die Liste
[1, 2.3, True, "Hallo"]
in ein Array zu konvertieren?Ist es möglich zwischen Arrays unterschiedlicher Größe die Operatoren
+
,-
,*
und/
anzuwenden?Ist es möglich ein Array zu vergrößern?
Lösung#
Show code cell content
import numpy as np
array = np.array([0,1,2,3,4,5,6,7,8,9])
print(array)
array = np.array(range(10))
print(array)
array = np.arange(10) # Hat die selben Parameter wie range(...)
print(array)
[0 1 2 3 4 5 6 7 8 9]
[0 1 2 3 4 5 6 7 8 9]
[0 1 2 3 4 5 6 7 8 9]
Show code cell content
import numpy as np
print("Addition von Listen bzw. Arrays:")
print([0,1,2,3]+[0,1,2,3])
# print([0,1,2,3]-[0,1,2,3]) Bei Listen nicht möglich
print(np.arange(4)+np.arange(4))
print(np.arange(4)-np.arange(4))
print("Addition/Subtraktion mit einer Zahl")
# print([0,1,2,3]+1) Bei Listen nicht möglich
# print([0,1,2,3]-1) Bei Listen nicht möglich
print(np.arange(4)+1)
print(np.arange(4)-1)
print("Multiplikation/Division mit einer Zahl")
print([0,1,2,3]*2)
# print([0,1,2,3]/1) Bei Listen nicht möglich
print(np.arange(4)*2)
print(np.arange(4)/2)
Addition von Listen bzw. Arrays:
[0, 1, 2, 3, 0, 1, 2, 3]
[0 2 4 6]
[0 0 0 0]
Addition/Subtraktion mit einer Zahl
[1 2 3 4]
[-1 0 1 2]
Multiplikation/Division mit einer Zahl
[0, 1, 2, 3, 0, 1, 2, 3]
[0 2 4 6]
[0. 0.5 1. 1.5]
Bedingt, ein Array kann nur einen Typ haben, daher werden alle Elemente in
str
umgewandelt. Zusatz: Der genaue Typ kann mit dem parameterdtype
festgelegt werden.Nein, Arrays müssen für die angegeben Operatoren immer die gleiche Länge haben, da sonst nicht für jeden Index der Operator angewandt werden kann.
Nein, ein Array hat immer eine fixe Größe. Es ist jedoch möglich ein neues Array zu erstellen, mit dem hinzugefügten Element.
Aufgabenteil B - Verständnis, mehrdimensionale Arrays#
So wie Listen, können auch Arrays mehrdimensional sein. Solch ein Array kann wie folgt definiert werden.
array = np.array([
[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9,10,11,12],
[13,14,15,16],
])
Ermitteln Sie aus dem Array:
die Größe (size), also die gesamte Anzahl an Elementen,
die Form (shape), also wie viele Einträge pro Axe,
und die Dimension, also wie viele Axen vorhanden sind.
Ähnlich wie bei Listen mit
[index]
für eine einzelne Stelle,[start:ende]
für einen Teil und[:]
für die gesamte Liste, kann auch ein Array modifiziert werden. Dabei wird durch ein,
auf die nächste Axe zugegriffen.
Greifen Sie auf das Array zu, sodass …1 zurückgegeben wird.
die 2. Reihe zurück gegeben wird.
die 3. Spalte zurück gegeben wird.
die 4 mittleren Werte zurückgegeben werden.
Lösung#
Show code cell content
print("Größe:", array.size)
print("Form:", array.shape)
print("Dimension:", len(array.shape))
Größe: 16
Form: (4, 4)
Dimension: 2
Show code cell content
print(array[0,0])
print(array[1])
print(array[:,2])
print(array[1:3,1:3])
1
[5 6 7 8]
[ 3 7 11 15]
[[ 6 7]
[10 11]]
Aufgabenteil C - Laden von Daten aus Dateien#
Mit der Funktion loadtxt
vom Modul NumPy ist es möglich Daten einfach aus einer Textdatei zu laden. Lesen Sie sich die Dokumentation zu der Funktion durch und laden Sie die Daten der Datei, die Sie hier
downloaden können.
Die Datei enthält Daten bezüglich der gebauten Hochhäuser in Berlin, mit ihrer Gebäudehöhe, Vollgeschossanzahl und Baubeginn. Laden Sie die Daten und plotten Sie ..
die Gebäudehöhe in Abhängigkeit vom Baubeginn.
das Verhältnis aus Vollgeschosszahl und Gebäudehöhe in Abhängigkeit vom Baubeginn.
Lösung#
Show code cell content
import numpy as np
import matplotlib.pyplot as plt
daten = np.loadtxt("hochhaeuser.csv", skiprows=1, delimiter=";")
hoehe = daten[:,0]
geschoss = daten[:,1]
jahr = daten[:,2]
plt.scatter(jahr, hoehe)
plt.title("Bauhöhe Hochhäuser Berlin")
plt.xlabel("Baubeginn")
plt.ylabel("Bauhöhe [m]")
plt.show()
Show code cell content
plt.scatter(jahr, geschoss/hoehe)
plt.title("Geschosseffizienz Hochhäuser Berlin")
plt.xlabel("Baubeginn")
plt.ylabel("Geschosseffizienz [Geschoss/m]")
plt.show()