Seite 1 von 1
von Matlab nach Python
Verfasst: Montag 30. Juni 2014, 15:27
von juve88
Hey leude!
ich hab da nen Problem! ich hab da nen Matlab code und den möchte ich gerne in Python haben! Komm aber nicht weiter! Könnt ihr mir helfen?
mein mom. Programm:
Code: Alles auswählen
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
import numpy as np
from pylab import *
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
X=[600,700,800];
Y=[30,60,90];
Z= array[[0.3168,0.1638,0.0742]
[0.2843,0.1515,0.04867]
[0.2575,0.1187,0.05717]]
ax.plot_wireframe(X, Y, Z)
plt.show()
Matlab:
Code: Alles auswählen
X=[600,700,800];
Y=[30,60,90];
Z=[0.3168 0.1638 0.0742;
0.2843 0.1515 0.04867
0.2575 0.1187 0.05717];
%% Interpolation
[xi,yi] = meshgrid(600:10:800 ,30:1:90);
zi= interp2(X,Y,Z,xi,yi);
%% Surfaceplot
surf(xi,yi,zi)
shading faceted
xlabel('Temperatur [grad C]');
ylabel('Zeit [min]');
zlabel('Verzug [mm]');
title('Ofen','fontsize',16);
view([112 30]);
könnt ihr mir helfen??
Re: von Matlab nach Python
Verfasst: Montag 30. Juni 2014, 15:57
von MagBen
Sollen wir beides nun ausprobieren und den Unterschied suchen?
Ich denke besser ist, wenn Du noch ein bisschen was erzählst:
Wirft das Python-Skript einen Fehler? Wenn ja, wie lautet der Stack-Trace?
Oder sehen beide Plots einfach nur unterschiedlich aus? Wenn ja, was ist der Unterschied?
Außerdem macht es Deinen Beitrag leserlicher, wenn Du Code-Stellen auch als solchen postest. Mach zwei getrennte Code-Blöcke, einen für Python und einen für Matlab. Mit dem Vorschau-Knopf kannst Du vorher das ganze kontrollieren und mit bearbeiten kannst Du Deinen Beitrag noch so abändern, dass keiner mehr verstehen wird, was ich zu Deiner ersten Version geschrieben habe.
Re: von Matlab nach Python
Verfasst: Montag 30. Juni 2014, 16:04
von juve88
HEy!
Ja sorry!
ne ich wollte eigentlich den Matlab-Code in einem Python-code umwandeln! Der Pythoncode ist schon mein erster Versuch! Jedoch kommt der Fehler :
Code: Alles auswählen
line 16, in <module>
[0.2843,0.1515,0.04867]
TypeError: list indices must be integers, not tuple
Es soll ein 3D Oberflächendiagramm rauskommen! Da ich jedoch zuhause kein Matlab habe wollte ich das Programm umschreiben! Vielleicht hilft mir ja jemand!
Re: von Matlab nach Python
Verfasst: Montag 30. Juni 2014, 16:21
von Sirius3
@juve88: bevor Du wild drauflos schreibst, solltest Du Dir die Syntax von Python anschauen, indem Du ein Tutorium Deiner Wahl durcharbeitest:
ist das selbe wie
Re: von Matlab nach Python
Verfasst: Montag 30. Juni 2014, 16:35
von BlackJack
@juve88: Oder noch mal anders ausgedrückt ``[…]`` ist nur dann eine Listendefinition wenn rechts davon kein Ausdruck steht. Wenn rechts davon ein Ausdruck steht, dann sind die eckigen Klammern der Indexoperator für den Zugriff auf das was rechts davon steht und der Ausdruck in den Klammern wird ausgewertet als wäre er nicht in diesen Klammern (die spezielle Slice-Notation mal ausgenommen) und ergibt immer *ein* Objekt als Ergebnis. Also sind bei ``something[a,b,c]`` die Kommas zwischen den Elementen dafür verantwortlich das der Ausdruck zwischen den Klammern ein Tupel mit drei Elementen ist. Rechts von dem beanstandeten Indexoperator steht eine Liste und auf eine Liste kann man nicht mit einem Tupel als Index zugreifen — was die Fehlermeldung ja sagt:
Code: Alles auswählen
In [466]: [1, 2, 3][1]
Out[466]: 2
In [467]: [1, 2, 3][1, 2]
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-467-a1d859a2062a> in <module>()
----> 1 [1, 2, 3][1, 2]
TypeError: list indices must be integers, not tuple
Wie bei allen Operatoren kann man zwischen Operand und Operator beliebig viel Leerraum lassen und wenn anderweitig noch offene Klammern ausstehen, dann ist für den Python-Compiler die ”logische” Zeile noch nicht zuende, darum kann man dann auch Zeilenumbrüche in dem Leerraum zwischen Operand und Operator haben.
Code: Alles auswählen
In [468]: [[1, 2, 3]
.....: [1]]
Out[468]: [2]
In [469]: [[1, 2, 3]
.....: [1, 2]]
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-469-7c20c2f10f23> in <module>()
1 [[1, 2, 3]
----> 2 [1, 2]]
TypeError: list indices must be integers, not tuple
Re: von Matlab nach Python
Verfasst: Montag 30. Juni 2014, 17:21
von juve88
Jop,
hab gemerkt das ich da nen Fehler hatte! nun hab ich das nochmals geändert und siehe da! es karm was! nur nicht wie gewünscht!
Code: Alles auswählen
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
import numpy as np
from pylab import *
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
X=[600,700,800];
Z=[30,60,90];
Y= np.array ([[0.3168,0.1638,0.0742],[0.2843,0.1515,0.04867],[0.2575,0.1187,0.05717]])
surf=ax.plot_surface(X,Y,Z, cmap=cm.jet , rstride=2, cstride=2, linewidth=0)
fig.colorbar(surf)
##ax.set_xlabel('X Temperatur [°C]')
##ax.set_ylabel('Y Zeit [min]')
##ax.set_zlabel('Z Verzug [mm]')
plt.show()
Nun Vergleiche ich aber meine beide Ergebnisse und merke
1. Wieso ist beim Python-code keine Cmap
2. Wieso sehen die Grafiken doch so unterschiedlich aus?
3. Wie muss ich mein Code optimieren?
Re: von Matlab nach Python
Verfasst: Montag 30. Juni 2014, 18:01
von MagBen
Probier das mal
Code: Alles auswählen
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
import numpy as np
from pylab import *
from scipy.interpolate import interp2d
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
X=np.array([600,700,800])
Y=np.array([30,60,90])
Z=np.array([[0.3168,0.1638,0.0742],
[0.2843,0.1515,0.04867],
[0.2575,0.1187,0.05717]])
xi_1d = np.linspace(600,800,21)
yi_1d = np.linspace(30,90,61)
xi_2d, yi_2d = np.meshgrid(xi_1d, yi_1d)
z_fkt = interp2d(X,Y,Z)
zi = z_fkt(xi_1d,yi_1d)
surf=ax.plot_surface(xi_2d,yi_2d,zi, rstride=1, cstride=1, cmap=cm.coolwarm)
fig.colorbar(surf)
plt.show()
Matlab und (Numpy,Scipy,Matplotlib) sind sich ziemlich ähnlich. Wenn Du in Matlab "meshgrid" und "interp2" benutzt, dann brauchst Du das auch im Python Skript.