Matrix mit for Schleife/Fehler Surf-Plot

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
pyol
User
Beiträge: 6
Registriert: Dienstag 4. Dezember 2018, 11:42

Hallo, da reshape von 1x441 auf 21x21 nicht funktioniert hat, habe ich mit einer for Schleife die 21x21 Matrix wie folgt zu erzeugen:

Zer = np.zeros((21,21))
T_INTER = Zer
T_INTER_2 = Zer
T_INTER_3 = Zer
XX = Zer
YY = Zer
Z_ = Zer
Z_2 = Zer
Z_1 = Zer
for N in range(21):
for M in range(21):
N_mi = N - 1
M_mi = M - 1
NN = N_mi*21 + M_mi
T_INTER = T_inter[NN]
T_INTER_2[N_mi,M_mi] = T_inter_2[NN]
T_INTER_3[N_mi,M_mi] = T_inter_3[NN]
XX[N_mi,M_mi] = b[NN]
YY[N_mi, M_mi] = a[NN]
Z_[N_mi,M_mi] = 0
Z_2[N_mi,M_mi] = raumh_1
Z_1[N_mi,M_mi] = raumh_2
np.disp(T_INTER)

also einfach die 21x21 Matrizen mit den Werten der 1x441 Matrizen Werten überschreiben, allerdings werden die falschen Werte ausgegeben. Da T_INTER die richtigen Werte angibt muss es daran liegen dass man die Werte nicht überschreiben kann. Jemand eine Idee wie man das Problem umgehen kann oder ohne Fehlermeldung reshapen kann?


Außerdem wird, wenn ich versuche ein Oberflächenplot mit den gleichen shape 1x441 zu erzeugen, diese Fehlermeldung angezeigt: AttributeError: 'NoneType' object has no attribute 'plot_surface', vielleicht hat ja dazu jemand eine Idee.
fig = plt.figure()
ax = fig.add_subplot(projection='3d')
ax.plot_surface(b, a, z)
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

Lies bitte eines der vielen Tutorials durch, die extra für Matlab-Umsteiger geschrieben wurden:
https://www.google.de/search?q=python+for+matlab+users

Hier jeden Fehler einzeln durchzugehen wäre müßig, wenn Du die Grundlagen noch nicht kennst.
pyol
User
Beiträge: 6
Registriert: Dienstag 4. Dezember 2018, 11:42

vielen Dank für den aufschlussreichen Beitrag ;). Also im Prinzip erwarte ich nicht, dass jeder Fehler durchgegangen wird (wenn es so viele sind) ,sondern nur warum es grundsätzlich nicht geht die Matrix so zu überschreiben.
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

Wenn das, was Du hier zeigst, so ähnlich in Matlab geschrieben war, dann war das auch schon sehr umständlich. Du willst wahrscheinlich nur ein paar reshape-Aufrufe, was ich aber wegen der potentiellen Fehler nicht sicher sagen kann. Verbindet man den Code hier mit dem Deines vorigen Threads, bleibt nicht mehr viel übrig, weil dort hast Du 2d-Arrays zu 1D verformt, und hier machst Du das wieder rückgängig. Beides kann man also genauso gut weglassen.

Ich könnte jetzt hier schreiben, was konkret falsch ist, aber das hilft Dir nicht weiter, weil Du beim nächsten Schritt wieder nicht weiter kommst. Du mußt also Python und NumPy lernen und dort auch das Kapitel lesen, was es für Unterschiede zu Matlab gibt. Wenn Du dann konkrete Fragen hast, kannst hier gerne weiter fragen. Solange es sich um Basics handelt, verweise ich lieber auf die Literatur.
pyol
User
Beiträge: 6
Registriert: Dienstag 4. Dezember 2018, 11:42

Danke für deine Antwort. Prinzipiell ist die Form egal, ich hab bloß in Matlab, weil mir beim ploten die Fehlermeldung erschienen ist, dass Z nicht 1 Dimensional nicht sein darf, die Matrix neu angeordnet. Und da ich den Code eben in python umgeschrieben habe ich das auch übernommen.Dass ich das 1D Array wieder eingesetzt habe war also nur ein Test. Keine Frage dass es elegantere Lösungen gibt, aber ich weil einfach schnell ans Ziel.
pyol
User
Beiträge: 6
Registriert: Dienstag 4. Dezember 2018, 11:42

Meine konkreten Fragen sind: wieso funktioniert der Plot nicht obwohl X,Y,Z die gleiche Form hat und wie kann am einfachsten eine Matrix mit bestimmter Form und definierten Werten z.B aus Berechnungen bestimmt und zugegriffen werden.
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

bzgl. 3D Plots schau dir mal diesen SO Thread an https://stackoverflow.com/questions/917 ... ib#9170879
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

@pyol: was heißt, der Plot funktioniert nicht? Eine konkrete Frage wäre, "ich habe diesen Input, will das machen, und zwar mit folgendem Code, erwarte diese Ergebnis bekomme aber jenes". Nur so kann der Helfende abschätzen, wo das Verständnisproblem liegt.

Daneben hilft es, das Problem in seiner Gesamtheit zu beschreiben.
Antworten