Hallo zusammen,
bin gerade an der Programmierung der Temperaturverteilung in 2D und möchte hierzu eine sehr große Koeffizientenmatrix (Zeilen 1250, Spalten 1250) erstellen. Die meisten Einträge sind Null, deshalb habe ich als ursprüngliche Matrix F die Nullmatrix gewählt (F = np.zeros((1250,1250)))
Nun möchte ich einzelne Nullen durch berechnete Zahlen ersetzen. Hier mal ein Code dafür. Das passt auch ganz gut.
F[1,0]=-D1 #ordnet der 2.Zeile an der 1.Stelle in der Matrix F -D1 zu
F[1,1]=E2 #ordnet der 2.Zeile an der 2.Stelle in der Matrix F E2 zu
F[1,2]=-D1 #ordnet der 2.Zeile an der 3.Stelle in der Matrix F -D1 zu
F[1,25]=-2*D2 #ordnet der 2.Zeile an der 26.Stelle in der Matrix F -2D2 zu
Nun sollen sich die oben genannten Einträge (4 Stück) die nächsten 23 Male wiederholen, allerdings immer um eine Stelle nach rechts verschoben!
Hier mal die nächste Zeile:
F[2,1]=-D1 #ordnet der 3.Zeile an der 2.Stelle in der Matrix F -D1 zu
F[2,2]=E2 #ordnet der 2.Zeile an der 2.Stelle in der Matrix F E2 zu
F[2,3]=-D1 #ordnet der 2.Zeile an der 3.Stelle in der Matrix F -D1 zu
F[2,26]=-2*D2 #ordnet der 2.Zeile an der 27.Stelle in der Matrix F -2D2 zu
In der eckigen Klammer müssen die beiden Positionen um jeweils 1 erhöht werden, und das 23 Mal. Außerdem müssen diese neuen Einträge auch in der Matrix F erscheinen.
Wie kann ich das nun am effizientesten umsetzen?
Ich weiß, dass das wahrscheinlich nicht die eleganteste Umsetzung ist, allerdings bin ich Neuling in Python und die oben beschriebene Vorgehensweise erschien mir am einfachsten.
Ich danke euch für eure Vorschläge.
Grüße
wiederholtes Ersetzen von Nullen in Nullmatrix
-
- User
- Beiträge: 11
- Registriert: Samstag 3. Dezember 2016, 21:50
Hallo,
ich nehme an, dass der Text im 3. Absatz heißt:
F[2,1]=-D1 #ordnet der 3.Zeile an der 2.Stelle in der Matrix F -D1 zu
F[2,2]=E2 #ordnet der 3.Zeile an der 3.Stelle in der Matrix F E2 zu
F[2,3]=-D1 #ordnet der 3.Zeile an der 4.Stelle in der Matrix F -D1 zu
F[2,26]=-2*D2 #ordnet der 3.Zeile an der 27.Stelle in der Matrix F -2D2 zu .
Dann hilft der folgende Code:
Gruß
ich nehme an, dass der Text im 3. Absatz heißt:
F[2,1]=-D1 #ordnet der 3.Zeile an der 2.Stelle in der Matrix F -D1 zu
F[2,2]=E2 #ordnet der 3.Zeile an der 3.Stelle in der Matrix F E2 zu
F[2,3]=-D1 #ordnet der 3.Zeile an der 4.Stelle in der Matrix F -D1 zu
F[2,26]=-2*D2 #ordnet der 3.Zeile an der 27.Stelle in der Matrix F -2D2 zu .
Dann hilft der folgende Code:
Code: Alles auswählen
import numpy as np
D1 = 10 # Beispielwert
D2 = 2 # Beispielwert
E2 = 3 # Beispielwert
F = np.zeros((1250,1250))
for i in range(24):
F[i+1,i]=-D1
F[i+1,i+1]=E2
F[i+1,i+2]=-D1
F[i+1,i+26]=-2*D2
Das kann man mit einem List-Index auch ohne Schleife schreiben:
Code: Alles auswählen
idx = np.arange(24)
F[idx+1, idx] = -D1
F[idx+1, idx+1] = E2
F[idx+1, idx+2] = D1
F[idx+1, idx+26] = 2*D1