wiederholtes Ersetzen von Nullen in Nullmatrix

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
marco4444r
User
Beiträge: 2
Registriert: Freitag 12. April 2019, 16:12

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
simplesimon
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:

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 
Gruß
Sirius3
User
Beiträge: 18270
Registriert: Sonntag 21. Oktober 2012, 17:20

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
Antworten