Seite 1 von 1

wiederholtes Ersetzen von Nullen in Nullmatrix

Verfasst: Montag 29. April 2019, 18:14
von marco4444r
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

Re: wiederholtes Ersetzen von Nullen in Nullmatrix

Verfasst: Dienstag 30. April 2019, 20:19
von simplesimon
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ß

Re: wiederholtes Ersetzen von Nullen in Nullmatrix

Verfasst: Donnerstag 2. Mai 2019, 19:30
von Sirius3
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