Mehrzeilige und mehrspaltige Tabelle
@anika_20: Die `sheet_by_index()`-Methode ist nicht von Python definiert sondern vom Autor von `xlrd`. Genau wie die `get_sheet()`-Methode auf dem gleichen Datentyp, nur das die nicht öffentlich dokumentiert ist. Ich hatte da die Objekte ”live” angeschaut statt die Dokumentation, und hatte das Beispiel nicht ausprobiert, weil ich zu faul war mir eine Excel-Datei dafür zu erzeugen.
Dein Problem ist das Du wieder die `get_sheet()`-Methode aufrufst. ``book.get_sheet(0)`` ruft die Methode auf dem `book`-Objekt auf und nicht auf magische Weise Deine Funktion. Und wenn Du dort Deine Funktion aufrufen würdest, dann wäre die Zeile vor dem Aufruf auch unsinnig, denn das `book` welches dort in Zeile 6 definiert wird, wird im weiteren Verlauf dann ja gar nicht verwendet.
Dein Problem ist das Du wieder die `get_sheet()`-Methode aufrufst. ``book.get_sheet(0)`` ruft die Methode auf dem `book`-Objekt auf und nicht auf magische Weise Deine Funktion. Und wenn Du dort Deine Funktion aufrufen würdest, dann wäre die Zeile vor dem Aufruf auch unsinnig, denn das `book` welches dort in Zeile 6 definiert wird, wird im weiteren Verlauf dann ja gar nicht verwendet.
BlackJack:So, dann in der Funktion "def get_sheet" definiere ich mein Objekt "book",auf dem Basis definiere ich mein "sheet",mit dem ich die Tabellennummer bestimmen kann.
In der nächsten Funktion read_vdot_air wird dann die Funktion "get_sheet" aufgerufen.Ich habe "self" hinzugefügt,da "get_sheet" für "def read_vdot_air" gilt.
Fehlermeldung:
runfile('F:/Masterthesis/excel_ablesen.py', wdir=r'F:/Masterthesis')
In der nächsten Funktion read_vdot_air wird dann die Funktion "get_sheet" aufgerufen.Ich habe "self" hinzugefügt,da "get_sheet" für "def read_vdot_air" gilt.
Code: Alles auswählen
import numpy as np
from xlrd import open_workbook
def get_sheet(self,fileName):
book = open_workbook(fileName)
sheet = book.sheet_by_index(0)
return sheet
def read_vdot_air(self,fileName):
sheet = self.get_sheet(fileName)
start_column_index, start_row_index = 2, 2
data_width, data_height = 4, 11
end_column_index = start_column_index + data_width
end_row_index = start_row_index + data_height
widths = np.array(sheet.col_values(start_column_index - 1, start_row_index,\
end_row_index))
heights = np.array(sheet.row_values(start_row_index - 1, start_column_index,\
end_column_index))
vdot_air = np.matrix([sheet.row_values(i, start_column_index, end_column_index)
for i in xrange(start_row_index, end_row_index)])
return widths, heights, vdot_air
w,y,z = read_vdot_air('F://Masterthesis//ungleichfoermige Anstroemung_air.xls')
print w
print y
print z
runfile('F:/Masterthesis/excel_ablesen.py', wdir=r'F:/Masterthesis')
Code: Alles auswählen
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 540, in runfile
execfile(filename, namespace)
File "F:/Masterthesis/excel_ablesen.py", line 32, in <module>
w,y,z = read_vdot_air('F://Masterthesis//ungleichfoermige Anstroemung_air.xls')
TypeError: read_vdot_air() takes exactly 2 arguments (1 given)
@anika_20: `self` ist ein Argumentname wie jeder andere auch. Da muss ein Argument für übergeben werden, wie für jedes andere Argument auch. Bei *Methoden* die in *Klassen* definiert wurden (oder auf andere Wege als Attribute auf das Klassenobjekt gelangen), wird auf dem *Exemplar* das aus so einer Klasse erzeugt wurde, beim Aufrufen automagisch das Exemplar selbst (darum heisst das Argument üblicherweise `self`) als erstes Argument übergeben, gefolgt von den weiteren Argumenten die beim Aufruf übergeben wurden.
Bei einer Funktion macht es deswegen üblicherweise keinen Sinn das erste Argument `self` zu nennen. Deine `read_vdot_air()` erwartet *zwei* Argumente, `self` und `fileName`, und Du rufst die mit *einem* Argument, einer Zeichenkette mit einem Dateinamen auf. Was soll denn da Deiner Meinung nach passieren? Ausser der Fehlermeldung die Du bekommst. Woher soll Python ein Objekt für das `self`-Argument nehmen, und welcher Wert sollte das sein?
Bei einer Funktion macht es deswegen üblicherweise keinen Sinn das erste Argument `self` zu nennen. Deine `read_vdot_air()` erwartet *zwei* Argumente, `self` und `fileName`, und Du rufst die mit *einem* Argument, einer Zeichenkette mit einem Dateinamen auf. Was soll denn da Deiner Meinung nach passieren? Ausser der Fehlermeldung die Du bekommst. Woher soll Python ein Objekt für das `self`-Argument nehmen, und welcher Wert sollte das sein?
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Was soll denn das "magische" (oder eher unsinnige!) ``self`` als Parameter in den Funktionen‽ Das ist wirklich mehr Raten als alles andere!
``self`` wird bei der Definition von Klassen per *Konvention* als erster Parameter bei *Methoden* benutzt, um das spätere Objekt an die Methode (implizit) zu übergeben. Du arbeitest hier mit *Funktionen*, die vollkommen losgelöst von Klassen funktionieren. Wenn Du denen *zwei* Parameter übergibst - egal, wie die heißen! - musst Du die auch mit zwei Parametern aufrufen. Genau das sagt Dir ja auch der Fehler...
``self`` wird bei der Definition von Klassen per *Konvention* als erster Parameter bei *Methoden* benutzt, um das spätere Objekt an die Methode (implizit) zu übergeben. Du arbeitest hier mit *Funktionen*, die vollkommen losgelöst von Klassen funktionieren. Wenn Du denen *zwei* Parameter übergibst - egal, wie die heißen! - musst Du die auch mit zwei Parametern aufrufen. Genau das sagt Dir ja auch der Fehler...
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
BlackJack:Vielen Dank,ich habe nochmal versucht und beide Variante funktionieren, egal ob ich "sheet_by_index" direkt in read_vdot_air benutze oder ob ich die Methode def get_sheet selbst definiere.Die letzte Version sieht so aus:
Nochmal Danke.
Code: Alles auswählen
import numpy as np
from xlrd import open_workbook
def get_sheet(fileName):
book = open_workbook(fileName)
sheet = book.sheet_by_index(0)
return sheet
def read_vdot_air(fileName):
sheet = get_sheet(fileName)
start_column_index, start_row_index = 2, 2
data_width, data_height = 4, 11
end_column_index = start_column_index + data_width
end_row_index = start_row_index + data_height
widths = np.array(sheet.col_values(start_column_index - 1, start_row_index,\
end_row_index))
heights = np.array(sheet.row_values(start_row_index - 1, start_column_index,\
end_column_index))
vdot_air = np.matrix([sheet.row_values(i, start_column_index, end_column_index)
for i in xrange(start_row_index, end_row_index)])
return widths, heights, vdot_air
w,y,z = read_vdot_air('F://Masterthesis//ungleichfoermige Anstroemung_air.xls')
print w
print y
print z
@anika_20: Das ist keine Methode sondern eine Funktion. Und die ist ein wenig lang und umständlich geschrieben:
Man muss ja nicht jedes Zwischenergebnis an einen eigenen Namen binden. Solange es nicht zu unübersichtlich wird und das Verständnis darunter leidet, kann man ruhig etwas mehr in einen Ausdruck stecken.
Code: Alles auswählen
def get_sheet(filename):
return open_workbook(filename).sheet_by_index(0)
Das Auslesen von Tabelle ist nur ein Teil meiner Aufgabe.Bevor ich zum Ziel komme,muss ich noch ein paar Rätseln lösen und zwar weiter geht es mit der Interpolation innerhalb von der Tabelle.Das Problem ist hier die Matrix.Ich habe schon ein Beispiel gelöst,wenn ich der Volumenstrom als Funktion der Breite habe aber in meinem Beispiel ist der Volumenstrom nicht nur von der Breite sondern von der Höhe abhängig.Wie geht so was?Hier ist meine Funktion wenn VdotLiq=f(cellwidth):
In meinem neuen Beispiel habe ich 3 Variablen:self.cellwidth,self.cellheight,self.VdotAir.Außerdem ist self.cellheigh eine Matrix und die Funktion sieht so:
Es ist klar dass er schmeißt mir Fehler raus,weil self.cellwidth ein Vektor und self.VdotAir eine Matrix ist:
Ich bin nicht sicher,dass das Programm vom Thema her noch dazu passt?
Code: Alles auswählen
def readVdotLiq(self, fileName):
sh = self._getWorkBook(fileName)
col = self._getPropertyCol('Width', sh)
col2 = self._getPropertyCol('VdotLiq', sh)
#vdotlist = []
self.cellwidth = array([x for x in sh.col_values(col)[1:12] if x != ''])
self.VdotLiq = array([x for x in sh.col_values(col2)[1:12] if x != ''])
#
self.tck = splrep(self.cellwidth,self.VdotLiq,k=3,s=0)
Code: Alles auswählen
def readVdotAir(self, fileName):
sh = self._getWorkBook(fileName)
start_column_index ,start_row_index = 2,2
data_width, data_height = 11,11
end_column_index = start_column_index + data_height
end_row_index = start_row_index + data_width
self.cellwidth = array([sh.col_values(start_column_index-1,start_row_index,\
end_row_index)])
self.cellheight = array([sh.row_values(start_row_index-1,start_column_index,\
end_column_index)])
self.VdotAir = matrix([sh.row_values(i ,start_column_index, end_column_index)\
for i in xrange(start_row_index, end_row_index)])
self.tck = splrep(self.cellwidth,self.VdotAir,k=3,s=0)
Code: Alles auswählen
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 540, in runfile
execfile(filename, namespace)
File "C:/SVNRepo/branches/1.0/modules/measurementDataReader.py", line 250, in <module>
op.readVdotAir('F://Masterthesis//Anstroemung_air.xls')
File "C:/SVNRepo/branches/1.0/modules/measurementDataReader.py", line 122, in readVdotAir
self.tck = splrep(self.cellwidth,self.VdotAir,k=3,s=0)
File "C:\Python27\lib\site-packages\scipy\interpolate\fitpack.py", line 444, in splrep
raise TypeError('Lengths of the first three arguments (x,y,w) must be equal')
TypeError: Lengths of the first three arguments (x,y,w) must be equal
So ,ich habe in scipy die Funktionen,die solche Probleme in 2D-Bereich lösen gefunden:das sind bisplrep und bisplev.wenn ich schreibe:
bekomme ich die Fehlermeldung:
Von der anderen Seite,ist das doch klar dass,wenn man in 2D-Bereich interpolieren will,liegt eine Matrix dazwischen.
Code: Alles auswählen
def readVdotAir(self, fileName):
sh = self._getWorkBook(fileName)
#
start_column_index ,start_row_index = 2,2
data_width, data_height = 11,11
end_column_index = start_column_index + data_height
end_row_index = start_row_index + data_width
self.cellwidth = array([sh.col_values(start_column_index-1,start_row_index,\
end_row_index)])
self.cellheight = array([sh.row_values(start_row_index-1,start_column_index,\
end_column_index)])
self.VdotAir = array([sh.row_values(i ,start_column_index, end_column_index)\
for i in xrange(start_row_index, end_row_index)])
self.tck = bisplrep(self.cellheight,self.cellwidth, self.VdotAir,kx=3, ky=3)
Code: Alles auswählen
Imported NumPy 1.8.0, SciPy 0.13.3, Matplotlib 1.3.1
+ guidata 1.6.1, guiqwt 2.3.1
Type "scientific" for more details.
>>> runfile('C:/SVNRepo/branches/1.0/modules/measurementDataReader.py', wdir=r'C:/SVNRepo/branches/1.0/modules')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 540, in runfile
execfile(filename, namespace)
File "C:/SVNRepo/branches/1.0/modules/measurementDataReader.py", line 250, in <module>
op.readVdotAir('F://Masterthesis//Anstroemung_air.xls')
File "C:/SVNRepo/branches/1.0/modules/measurementDataReader.py", line 122, in readVdotAir
self.tck = bisplrep(self.cellheight,self.cellwidth, self.VdotAir,kx=3, ky=3)
File "C:\Python27\lib\site-packages\scipy\interpolate\fitpack.py", line 868, in bisplrep
raise TypeError('len(x)==len(y)==len(z) must hold.')
TypeError: len(x)==len(y)==len(z) must hold.
>>>
Und? Dir ist natürlich klar was gemacht werden soll, aber die Funktion kann mit den übergebenen Werten nichts anfangen. Du musst sie schon so übergeben, wie sie von ihr erwartet werden. Welche Eigenschaft erwartet wird, dass sagt die Fehlermeldung ja nun mehr als deutlich.
Das Leben ist wie ein Tennisball.
Die Fehlermeldung sagt,dass die ersten drei Elemenete der "bisplrep"-Funktion die gleiche Anzahl der Komponeneten haben sollen.wenn ich meine Matrix mit "reshape" in Vektor transformieren möchte,wird mein Vektor doppelt so groß,da die Tabelle die Werte in zwei Richtungen hat.
@anika_20: Die Tabelle muss halt quadratisch sein und nicht rechteckig, sonst geht das so nicht.
BlackJack:Vielen Dank.Ich habe in Wirklichkeit eine quadratische Tabelle,nur zu Probe war sie anders.Ich habe sie schon geändert.
Es funktioniert auch.So sieht es momentan aus:
Vielleicht kann mir jemand noch helfen:gibt es Möglichkeit,dass Python die Anzahl der Zellen(data_width,data_height) automatisch erkennt oder geht das nur wenn man das manuell eingibt?
Es funktioniert auch.So sieht es momentan aus:
Code: Alles auswählen
def readVdotAir(self, fileName):
sh = self._getWorkBook(fileName)
start_column_index ,start_row_index = 2,2
data_width, data_height = 11,11
end_column_index = start_column_index + data_height
end_row_index = start_row_index + data_width
self.cellwidth = array(sh.col_values(start_column_index-1,start_row_index,\
end_row_index))
self.cellheight = array(sh.row_values(start_row_index-1,start_column_index,\
end_column_index))
self.VdotAir = self.VdotAir = array([sh.row_values(i ,start_column_index, end_column_index)\
for i in xrange(start_row_index, end_row_index)])
x, y = meshgrid(self.cellheight, self.cellwidth)
self.bitck = Rbf(x, y, self.VdotAir)
Ich kenne mich mit xlrd nicht aus, aber ich mache sehr viel mit gewrappten C++ Klassen in Python und vieles davon lässt sich wohl auch auf die Excel-Python Schnittstelle übertragen.
Am Ende Deiner Methode get_sheet wird geht die Variable book out-of-scope. Es könnte sein, dass Du dann Probleme bekommst auf ein sheet zuzugreifen, wenn das book gelöscht wurde. Probier mal ob es damit klappt:
Am Ende Deiner Methode get_sheet wird geht die Variable book out-of-scope. Es könnte sein, dass Du dann Probleme bekommst auf ein sheet zuzugreifen, wenn das book gelöscht wurde. Probier mal ob es damit klappt:
Code: Alles auswählen
def get_sheet(fileName):
book= open_workbook(fileName)
sheet = book.sheet_by_index(0)
return book, sheet
def read_vdot_air(fileName):
book, sheet = get_sheet(fileName)
...
@MagBen: Welches Problem versuchst Du damit denn jetzt zu lösen? Die Funktion funktioniert doch so wie sie da steht.
Ich sehe auch nicht wieso das verschwinden des Namens `book` irgendwo ein Problem darstellen sollte. Entweder hat das `sheet`-Objekt alle Daten die es braucht, dann kann das `book`-Objekt ruhig zerstört werden. Oder es greift auf das `book`-Objekt zu wenn man Methoden auf dem `sheet` aufruft — in dem Falle hätte es aber selber noch eine Referenz auf das `book`-Objekt, denn sonst könnte es ja nicht darauf zugreifen. Und in dem Falle wird das `book`-Objekt auch nicht zerstört wenn der Name in der Funktion verschwindet.
Ich sehe auch nicht wieso das verschwinden des Namens `book` irgendwo ein Problem darstellen sollte. Entweder hat das `sheet`-Objekt alle Daten die es braucht, dann kann das `book`-Objekt ruhig zerstört werden. Oder es greift auf das `book`-Objekt zu wenn man Methoden auf dem `sheet` aufruft — in dem Falle hätte es aber selber noch eine Referenz auf das `book`-Objekt, denn sonst könnte es ja nicht darauf zugreifen. Und in dem Falle wird das `book`-Objekt auch nicht zerstört wenn der Name in der Funktion verschwindet.
@MegBen: xlrd ist eine reine Python-Bibliothek. Damit kann es nicht zu fehlerhaften Referenzen kommen, wie das bei Deinen C++-Geschichten vielleicht möglich ist. Das Problem war, dass die get_sheet-Methode von Workbook eine interne Methode ist, die ein Sheet lädt, und sobald das Sheet einmal geladen ist, mit einer Fehlermeldung abbricht. Der offizielle Weg über sheet_by_index hat diese Nebenbedingungen nicht.
Hallo Leute, nochmals herzlichen Dank für die Hilfe.Habe momentan noch ein Problem, und zwar nachdem ich die Daten interpoliert habe, benutze ich sie für die weiteren Berechnungen.Nochmals zur Erinnerung,meine Funktion sieht so aus:
Weiter geht es mit der Berechnung von Wärmeübergang in einem Wärmetauscher, der aus der unterschiedlichen Anzahl der Zellen bestehen kann.Die Anzahl der Zellen in den unterschiedlichen Richtungen(x,y,z) wird als nDepth,nHeight,nWidth definiert. Wie es schon aus früheren Berechnungen klar ist, habe ich Luft- und Flüssigkeitsseite.Die Eintrittsdaten,wie Volumen(VdotAirCell oder VdotLiqCell) werden mit der Klasse 'operationData' abgelesen.Weiter geht es mit der Schleife, in der die Zellennummern berechnet werden.Un dann werden die Volumina in einzelnen Zellen berechnet.Hier sieht man,dass 'VdotAirCell' bitck-Funktion benutzt,die früher definiert wurde.(siehe oben).
Mein Problem ist,dass wenn ich mit mehreren Zellen berechne,macht er alles richtig.Ich vergleiche mit einem kompletten Wärmetauscher,der die gleiche Eigenschaften hat, aber die andere Funktion benutzt.Wenn ich aber nur eine Zelle habe,berechnet er absolut falsch.Ich weiß,dass es nicht so einfach ist, aber vielleicht hat jemand eine Idee,wie man so was löst?
Code: Alles auswählen
def readVdotAir(self, fileName):
sh = self._getWorkBook(fileName)
start_column_index ,start_row_index = 2,2
data_width, data_height = 6,6
end_column_index = start_column_index + data_height
end_row_index = start_row_index + data_width
self.cellwidth = array(sh.col_values(start_column_index-1,start_row_index,\
end_row_index))
self.cellheight = array(sh.row_values(start_row_index-1,start_column_index,\
end_column_index))
self.VdotAir = array([sh.row_values(i ,start_column_index, end_column_index)\
for i in xrange(start_row_index, end_row_index)])
#
x, y = meshgrid(self.cellheight, self.cellwidth)
self.bitck = Rbf(x, y, self.VdotAir)
Code: Alles auswählen
def calculateHeatTransfer(self, model, operationData):
VdotAirCell = operationData.VdotAir/(self.nWidth*self.nHeight)
VdotLiqCell = operationData.VdotLiq/(self.nDepth*self.nWidth)
tAirInCell = operationData.tAirIn
tLiqInCell = operationData.tLiqIn
jTeilung = 1./self.nWidth
kTeilung = 1./self.nWidth
cellOp = []
Q = 0.
for i in range(self.nDepth):
for j in range(self.nWidth):
jcell = (j + 0.5)*jTeilung
for k in range(self.nHeight):
kcell = (k + 0.5)*kTeilung
print 'kcell',kcell
print i,j,k, i*self.nHeight*self.nWidth + j*self.nHeight + k
# initialise operation data
cellOp.append(deepcopy(operationData))
# set boundary values for air
if (i - 1) < 0:
tAirIn = tAirInCell
VdotAirCell = operationData.bitck(kcell,jcell)/(self.nHeight*self.nWidth)
if VdotAirCell < 0.:
VdotAirCell = 0.
print 'VdotAirCell',VdotAirCell
Ich habe mittlerweiler golgendes probiert:wenn ich für den Wärmetauscher mit (nDepth = 1, nWidth = 1, nHeight = 1) statt
folgendes eingebe:
berechnet er richtig.4.4 ist der mittlere Volumenstrom.
Damit es ein wenig klarer ist, stelle ich meine Tabelle raus:
Im Fall (nDepth = 1, nWidth = 1, nHeight = 1) zeigt er mir VdotAirCell = 0.23790615307.Ich verstehe das nicht wie interpoliert er?
Wenn ich das hier betrachte:
ist mein jcell= (j + 0.5)*jTeilung= (0+0.5)*1/1=0.5 da jTeilung = 1./self.nWidth
und kcell = (k + 0.5)*kTeilung= (0+0.5)*1/1 =0.5 da kTeilung = 1./self.nWidth
ist Height = 0.5 und Width = 0.5 muss der Wert zwischen 1,498052619 1,888848955
1,591099366 1,172389006 liegen.
warum gibt er mir VdotAirCell = 0.23790615307 aus.Absolut unklar.
ich versuche die Tabelle im deutlichen Format zu speichern,die letzten zwei Zeilen rutschen nach rechts.
Code: Alles auswählen
VdotAirCell = operationData.bitck(jcell,kcell)/(self.nHeight*self.nWidth)
Code: Alles auswählen
VdotAirCell = 4.4
Damit es ein wenig klarer ist, stelle ich meine Tabelle raus:
Code: Alles auswählen
Width VdotAir
Height 0 0,2 0,4 0,6 0,8 1
0 4,308064365 4,922172892 5,154789758 4,950086916 4,549985906 4,615118628
0,2 4,736079399 5,192008457 4,391806436 4,401111111 5,164094433 4,661642001
0,4 4,875649518 4,549985906 1,498052619 1,888848955 4,680251351 4,987305614
0,6 4,912868217 4,540681231 1,591099366 1,172389006 4,522071882 4,940782241
0,8 4,6988607 5,201313131 4,308064365 4,261540991 5,089657035 4,810516796
1 4,615118628 4,6988607 4,847735494 5,219922481 5,005914964 4,41041578
Im Fall (nDepth = 1, nWidth = 1, nHeight = 1) zeigt er mir VdotAirCell = 0.23790615307.Ich verstehe das nicht wie interpoliert er?
Wenn ich das hier betrachte:
Code: Alles auswählen
for i in range(self.nDepth):
for j in range(self.nWidth):
jcell = (j + 0.5)*jTeilung
for k in range(self.nHeight):
kcell = (k + 0.5)*kTeilung
und kcell = (k + 0.5)*kTeilung= (0+0.5)*1/1 =0.5 da kTeilung = 1./self.nWidth
ist Height = 0.5 und Width = 0.5 muss der Wert zwischen 1,498052619 1,888848955
1,591099366 1,172389006 liegen.
warum gibt er mir VdotAirCell = 0.23790615307 aus.Absolut unklar.
ich versuche die Tabelle im deutlichen Format zu speichern,die letzten zwei Zeilen rutschen nach rechts.
Hallo Leute,ich bitte nochmal um die Hilfe. ich habe in meiner letzten Aufgabe immer noch kein Fehler gefunden.Ich habe kurze Ferien gahabt, aber das Problem muss ich noch lösen.Ich versuche es noch einmal,vielleicht kann mir jemand helfen. Mit def readVdotAir lese ich meine Daten aus der Excel-Tabelle ab:
Dann werden die interpolierten Daten durch Anzahl der Zellen dividiert:
(i-1) bedeutet hier nur das nur die Eintrittsdaten aus der Excel-Tabelle interpoliert werden müssen.
Was stimmt nicht?Kann man überhaupt mit Rbf interpolieren?
Danke für die HIlfe
Code: Alles auswählen
def readVdotAir(self, fileName):
sh = self._getWorkBook(fileName)
start_column_index ,start_row_index = 2,2
data_width, data_height = 6,6
end_column_index = start_column_index + data_height
end_row_index = start_row_index + data_width
self.cellwidth = array(sh.col_values(start_column_index-1,start_row_index,\
end_row_index))
self.cellheight = array(sh.row_values(start_row_index-1,start_column_index,\
end_column_index))
self.VdotAir = array([sh.row_values(i ,start_column_index, end_column_index)\
for i in xrange(start_row_index, end_row_index)])
#
x, y = meshgrid(self.cellheight, self.cellwidth)
print 'x,y',x,y
self.bitck = Rbf(x, y, self.VdotAir)
Code: Alles auswählen
if (i - 1) < 0:
tAirIn = tAirInCell
VdotAirCell = operationData.bitck(jcell,kcell)/(self.nHeight*self.nWidth)
Was stimmt nicht?Kann man überhaupt mit Rbf interpolieren?
Danke für die HIlfe
@anika_20: Ich denke das Problem was man als helfender hier hat, ist das es a) etwas umfangreicher ist sich hier einzuarbeiten, und b) Wissen jenseits von Python nötig ist um die Frage zu beantworten. Und zwar Wissen aus der Physik und auch mathematische Hintergründe.