ein freundliches hallo an alle
ich steh hier gerade vor einem problem andem ich gerade scheitere. ich schreibe momentan an einem programm das beliebige (genormte) wetterdatensätze auslesen und verarbeiten kann.
ich hab diverse daten mittels berechnet und die liegen nun brav in arrays. jetzt sollte ich aber nur auf einzellne elemente in einem array zugreifen um dameit weiterrechnen zu können.
mein erster gedanke war also eine einfache if-abfrage. blöder weise klappt das nicht
muss ich bei einem array etwas anderes anwenden, eine spezielle andere abfrage.
so long ...
(der nichtmehr weiter wissender) caneworld
if abfrage innerhalb eines array
Damit kann man nicht viel anfangen.
Kann es sein, dass du eine Liste und kein Array meinst?
Wozu die if-Abfrage? Was genau soll das denn leisten?
Etwas konkreter - evtl. auch mal mit ein paar Datensätzen und Code - sollte es schon sein.
Kann es sein, dass du eine Liste und kein Array meinst?
Wozu die if-Abfrage? Was genau soll das denn leisten?
Etwas konkreter - evtl. auch mal mit ein paar Datensätzen und Code - sollte es schon sein.
sorry, ich dachte meine beschreibung kann man verstehen ...
ich versuchs nochmal
das hier wäre die grundlegende funktionsweise. das array "tmwerte" beinhaltet insgesamt 8760 (float) zahlenwerte. ich möchte nun in der variablen "GTZ" alle werte, die größer sind als 15, von Tinnen abziehen und die summe daraus bilden.
aber mein gedanke mit der if-abfrage klappt net
ich versuchs nochmal
Code: Alles auswählen
def heiz(tmwerte):
Tinnen = 20
GTZ = 0
if tmwerte <= 15:
GTZ = sum(Tinnen - tmwerte)
return GTZ
aber mein gedanke mit der if-abfrage klappt net
Code: Alles auswählen
gtz = sum(20-wert for wert in tmwerte if wert>15)
Evtl. müsste noch so etwas wie der Betrag mit einbezogen werden?
Oder die Anzahl der Werte >15, um einen arithm. Mittelwert zu bilden?
Im übrigen offenbart deine Lösungsidee noch ein grundlegendes Nichtverstehen im Umgang mit Listen.
Meinst Du vielleicht so etwas?
Wobei ich auch *noch* einmal nachfrage was für einen Typ `tmwerte` hat!? Und zwar den *genauen* Typ, ein `array` gibt's nämlich nicht. In der Standardbibliothek gibt's `array.array` und bei solchen Aufgaben verwenden die Leute auch mal gerne ein `numpy.array`. Es kann aber auch sein, dass Du fälschlicherweise zu einer Liste (Typ `list`) "array" sagst. Deswegen die Nachfragen.
Code: Alles auswählen
def heiz(tmwerte):
return sum(20 - tmwert for tmwert in tmwerte if tmwert <= 15)
Sollte es ein numpy.array sein kannst du es auch mit
machen, aber das ist eine Eigenheit von numpy.array mit normalen listen und array funktioniert es wie oben schon erwähnt.
Code: Alles auswählen
def heiz(tmwerte):
Tinnen = 20
return sum(Tinnen - tmwerte[tmwerte <= 15])
<type 'numpy.ndarray'>
ist doch ein array, oder nicht?
der sinn und zweck der berechnung ist in etwa die bestimmung der stunden pro jahr, in abhängigkeit der außentemperatur, bei denen man ein gebäude beheizen muss und daher wichtig für eine dimensionierung einer heiz/kühlanlage zur optimalen ausnutzung von eingesetzter energie.
ich vermute jetzt mal das ihr denke "was zur hölle macht der kerl" und "wenn interessiert denn sowas schon"
aber sowas ist für einen angehenden ingenieur in zeiten von explodierenden energie kosten durchaus sinnvoll
ist doch ein array, oder nicht?
der sinn und zweck der berechnung ist in etwa die bestimmung der stunden pro jahr, in abhängigkeit der außentemperatur, bei denen man ein gebäude beheizen muss und daher wichtig für eine dimensionierung einer heiz/kühlanlage zur optimalen ausnutzung von eingesetzter energie.
ich vermute jetzt mal das ihr denke "was zur hölle macht der kerl" und "wenn interessiert denn sowas schon"
aber sowas ist für einen angehenden ingenieur in zeiten von explodierenden energie kosten durchaus sinnvoll
Jein. Es ist der Array-Datentyp von Numpy, der nicht zur Standardbibliothek von Python gehört(im Gegensatz zu array.array). Da das einen Unterschied ausmacht ist es bei der Fehlersuche hilfreich zu wissen, von welchem Array du sprichst.caneworld hat geschrieben:<type 'numpy.ndarray'>
ist doch ein array, oder nicht?
Jedenfalls kannst du es damit so wie von mir vorgeschlagen machen, das ist um einiges schneller.
Oder noch schneller:
Code: Alles auswählen
(Tinnen-a[a >= 15]).sum()
Zuletzt geändert von Darii am Montag 24. November 2008, 20:48, insgesamt 3-mal geändert.
Als Ingenieur sollte Dir klar sein, dass eine gute Lösung eine klare Aufgabenstellung voraussetzt. Es hapert hier ein wenig. Soweit ich es bisher verstanden habe, haben wir ein numpy array mit 24h/d * 365 d/a Temperaturwerten. Wenn es zu kalt ist, soll auf die Temperatur von 20° geheizt werden. Was mir noch nicht klar ist, ist was als Ergebnis der Funktion herauskommen soll. Von Deinem Code her würde ich sagen, die summe der Temperaturdifferenzen bis 20° für alle Temperaturen, die max. 15° betragen. Das wäre dann:caneworld hat geschrieben:<type 'numpy.ndarray'>
ist doch ein array, oder nicht?
der sinn und zweck der berechnung ist in etwa die bestimmung der stunden pro jahr, in abhängigkeit der außentemperatur, bei denen man ein gebäude beheizen muss und daher wichtig für eine dimensionierung einer heiz/kühlanlage zur optimalen ausnutzung von eingesetzter energie.
ich vermute jetzt mal das ihr denke "was zur hölle macht der kerl" und "wenn interessiert denn sowas schon"
aber sowas ist für einen angehenden ingenieur in zeiten von explodierenden energie kosten durchaus sinnvoll
Code: Alles auswählen
def heiz(tmwerte):
return sum(20 - t for t in tmwerte if t <= 15)
Später schreibst Du aber "... die bestimmung der stunden pro jahr ..." das liesse darauf schließen, dass als Ergebnis eine Anzahl an Stunden, in denen die Temperatur max. 15° beträgt herauskommen soll. das wäre dann:
Code: Alles auswählen
def heiz(tmwerte):
return len(t for t in tmwerte if t <= 15)
Das ist mal ein guter Satz!tordmor hat geschrieben:Als Ingenieur sollte Dir klar sein, dass eine gute Lösung eine klare Aufgabenstellung voraussetzt.
In der Tat, abgesehen von dem Widerspruch zwischen dem Vergleich der Temperatur im Quelltext und der Beschreibung, auf den du hinweist und der seinen Niederschlag z.B. schon in den - bis auf diesen Punkt - fast identischen Codesnippets von BlackJack und mir gefunden hat, ist das, was bisher berechnet wurde, auch ein ziemlich unbrauchbarer Wert.
Dein Vorschlag geht da inhaltlich sicher in eine brauchbarere Richtung.

was berechnet werden soll ist das hier.

wobei hier ti = Tinnen
und ta = tmwerte
und wie ihr bemerkt hab, hab ich eine schwäche im formulieren. sowas wie legasthenie mit formulieren. kann ja auch nix dafür
zum größer, kleiner problem ... da hab ich mich tatsächlich vertanvertan. es sollte natürlich kleiner heißen

wobei hier ti = Tinnen
und ta = tmwerte
und wie ihr bemerkt hab, hab ich eine schwäche im formulieren. sowas wie legasthenie mit formulieren. kann ja auch nix dafür
zum größer, kleiner problem ... da hab ich mich tatsächlich vertanvertan. es sollte natürlich kleiner heißen
Ok, es handelt sich um die Gradtagzahl. So wie ich den Artikel verstanden habe muss zunächst erstmal für jeden Tag die Durchschnittstemperatur berechnet werden, da das Array mit Stundentemperaturen vorliegt. Und dann wird für jeden Monat summiert und nicht über das ganze Jahr.
Rückgabewert wäre also ein 365-tuple mit Tages- oder ein 12-tuple mit Monatswerten. Für letzteres braucht man eine Kalenderfunktion um die Tage den Monaten zuordnen zu können ... alles andere als trivial.
Noch eine Frage: Was ist mit Schaltjahren? Hat das Array dann 24 Einträge mehr?
Rückgabewert wäre also ein 365-tuple mit Tages- oder ein 12-tuple mit Monatswerten. Für letzteres braucht man eine Kalenderfunktion um die Tage den Monaten zuordnen zu können ... alles andere als trivial.
Noch eine Frage: Was ist mit Schaltjahren? Hat das Array dann 24 Einträge mehr?
Zuletzt geändert von tordmor am Montag 24. November 2008, 21:32, insgesamt 1-mal geändert.
Zum einen ist die Formel so unbrauchbar (weil der Laufindex nicht festgelegt ist), zum anderen: Was soll das Ergebnis denn aussagen? Was bringt denn die reine Addition der Temperaturdiffferenzen?
Edit: Dank tordmor sind wir jetzt schlauer und der Nebel lichtet sich.
Wäre nicht verkehrt gewesen, wenn du selbst uns entsprechende Infos oder einen hilfreichen Link geliefert hättest ...
Edit: Dank tordmor sind wir jetzt schlauer und der Nebel lichtet sich.
Wäre nicht verkehrt gewesen, wenn du selbst uns entsprechende Infos oder einen hilfreichen Link geliefert hättest ...

Auf die Schnelle hab ich mal dashier gebastelt:
Code: Alles auswählen
def ta(temp):
"Tagesdurchschnittstemperatur für jeden Tag des Jahres bei stündlichen Messungen."
return tuple(sum(temp[i+j] for j in range(24)) / 24 for i in range(int(len(temp) / 24)))
def gradtagzahl(ta, ti=20, hg=15, year=None):
"Gradtagzahl nach VDI 2067 aus Tagesdurchschnittstemperaturen."
cal = calendar.Calendar()
if not year:
year = datetime.datetime.today().year
return tuple(sum(ti - ta[i] for i,x in cal.itermonthdays2(year, j) if ta[i] < hg) for j in range(1,13))
der rest des programms funktioniert (mittelwerte, graphische ausgabe etc...) es scheiterte nur an der <= 15 abfrage
macht euch keine sorgen, vielleicht bin ich im programmieren noch nicht der fiteste. am verständnis was ich berechne mangelts bei mir sicher nicht.
ich hab hier schließlich nicht danach gefragt ob jemand von euch das programm für mich schreibt sondern nur nach einer hilfe bei einem relativ kleinen problem an dem ich gescheitert bin. schließlich möchte ich ja was lernen
bei interesse kann ich den ganzen quellcode nächste woche gerne mal posten
ich bedanke mich natürlich bei jedem der mir geholfen hat
unterumständen kann ich auch mal behilflich sein. zwar vermutlich nicht beim programmieren aber wer allgemein eine frage zu energie hat, schreibt mich an
so long thx und gn8
macht euch keine sorgen, vielleicht bin ich im programmieren noch nicht der fiteste. am verständnis was ich berechne mangelts bei mir sicher nicht.
ich hab hier schließlich nicht danach gefragt ob jemand von euch das programm für mich schreibt sondern nur nach einer hilfe bei einem relativ kleinen problem an dem ich gescheitert bin. schließlich möchte ich ja was lernen
bei interesse kann ich den ganzen quellcode nächste woche gerne mal posten
ich bedanke mich natürlich bei jedem der mir geholfen hat
unterumständen kann ich auch mal behilflich sein. zwar vermutlich nicht beim programmieren aber wer allgemein eine frage zu energie hat, schreibt mich an

so long thx und gn8