loadtxt-Array "steuern"

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Artur
User
Beiträge: 47
Registriert: Freitag 21. Oktober 2011, 10:55

Tag liebes Forum. Ich bin noch Anfänger in Sachen Python. Ich nutze Pythonxy 2.7.3 und habe da ein kleines Problem, dass ich noch nicht lösen konnte. Ich habe eine Datei mit Messdaten "Frankfurt.dat". Sie ist schön in Spalten geordnet. Ich möchte den Mittelwert der monatlichen Temperatur ausrechnen, in dem Fall die 5. Spalte (col 4).

Code: Alles auswählen

from numpy import *
L=loadtxt("Frankfurt.dat",skiprows=4,usecols=[4],unpack=True,delimiter="\t")
print L       #check
mon_Mittelwert=sum(L)/len(L)
print mon_Mittelwert
Ich bekomme nun den Temperaturmittelwert fürs ganze Jahr raus, brauche aber die monatlichen. Wie würdet ihr vorgehen?

Die Datei sieht folgendermaßen aus:

"Frankfurt"
49.5244.-9.0288.92.-1

m dm h hy Ta RH FF DD H_Gh
1 1 1 1 1.1 85 2.0 180 0
1 1 2 2 1.1 85 1.7 180 0
1 1 3 3 0.7 87 1.5 180 0
1 1 4 4 0.6 88 1.7 180 0
1 1 5 5 0.4 89 1.6 180 0
1 1 6 6 0.6 88 1.8 180 0
1 1 7 7 0.3 90 1.6 180 0
1 1 8 8 0.0 93 2.0 180 0
1 1 9 9 0.6 90 1.7 180 0
1 1 10 10 1.4 86 2.8 180 13

Ich müsste im Code also irgendwie schreiben, dass für die mittlere Temperatur für Januar ausgerechnet werden muss, solange in der m-Spalte "1" steht., "2" bei Februar, ..usw. Ist es möglich das beim Hantieren mit loadtxt zu berücksichtigen? Geht das auch ohne Schleife?

Da, die Leute hier im Forum etwas feurig darauf reagieren, dass Anfänger etwas nicht wissen, tut es mir leid, wenn ich nicht 100% der Pythongrundlagen verinnerlicht habe. Es würde mich trotzdem freuen, wenn mir jemand mit meinem Problem helfen kann!

Gruß
Artur

PS: Die Datei ist jetzt ein wenig schmal geworden. Eigentlich sind die Spalten durch Tabulatoren getrennt!
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

loadtxt() liest alle Daten der Datei, also auch die Werte, die Du nicht willst. Wenn Du also bei loadtxt bleiben möchtest, filterst Du hinterher das raus, was Du nicht brauchst. Dafür musst Du den Monat natürlich auch einlesen. Z.B.:

Code: Alles auswählen

import numpy as np
daten = np.loadtxt('frankfurt.dat', skiprows=4, usecols=(0,4))
monats_daten = [temperatur for monat, temperatur in daten if monat==1]
Das kannst Du dann für alle Monate machen, die Dich interessieren.
BlackJack

@Artur: Das Vorgehen von kbr ist nur bedingt ratsam. Genau wie bei deiner Berechnung vom Mittelwert wird hier mit normalen Python-Mitteln auf `numpy`-Arrays operiert. Die benutzt man aber eigentlich weil man die beschleunigten Operationen auf diesem Datentyp haben möchte und eben nicht das allgemeine `sum()` oder die Werte in einer Liste.

Schau Dir mal die Methoden auf Arrays an und was man alles zum Indexieren eines `numpy`-Arrays verwenden kann. Lesestoff Tentative NumPy Tutorial und das Numpy Cookbook. Da besonders die „Rezepte” zum Thema „Indexing”.
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

BlackJack hat geschrieben:@Artur: Das Vorgehen von kbr ist nur bedingt ratsam.
Das stimmt. Vielleicht bin ich fälschlicherweise davon ausgegangen, dass Artur auch Programmieranfänger ist. Dann wäre Dein Lesestoff u.U. schwere Kost. Andererseits ist es natürlich sinnvoll, wenn man denn schon numpy nutzt, dieses dann auch konsequent zu tun.
BlackJack

@kbr: Selbst wenn der OP Programmieranfänger ist, deuten Numpy und die Art der Daten darauf hin, dass es sich um (wissenschaftliche) Messergebnisauswertung handelt. Und da wird dann in der Regel auch eine `numpy`-Lösung erwartet. Die Aufgabe taugt ja auch halbwegs um den Umgang mit `numpy`-Arrays zu üben.
Artur
User
Beiträge: 47
Registriert: Freitag 21. Oktober 2011, 10:55

Hi ihr, danke für die Antworten. Ich werde mir numpy Arrays mal genauer ansehen. Ich werde in Zukunft hauptsächlich mit Messwerten und der Rechnung mit diesen zu tun haben. Bin leider noch ein Anfänger und habe bisher kaum mit Arrays gearbeitet.
Antworten