Seite 1 von 1
mehrdimensionale arrays als ascii speichern
Verfasst: Mittwoch 31. Januar 2007, 09:46
von lise
hallo,
ich bin gerade dabei, mich in python "hineinzuschnuppern". finde ja, daß es eine gute entscheidung war, allerdings komm ich noch nicht so ganz mit den tausenden von hilfen klar, d.h. hab' einfach noch nicht die richtige für mein kleines problemchen gefunden. vielleicht findet sich ja hier jemand, der mir einen kleinen tip geben kann?
mein problem: es muß doch einen einfachen befehl geben, sowas in der art wie 'save' oder 'write'*, mit dem man mehrdimensionale arrays als ascii schreiben kann? für ein 2dim array z.b. sollen im file dann 2 spalten mit den werten stehen. binär hab' ich das ganze schon untergebracht, auch 1dim arrays sind kein problem als ascii (mit schleife). oder sollte ich nun einfach 2 schleifen draus machen? kann man das dann trotzdem wieder als 2 spalten rauslesen? also n schleifen für n dimensionen? das geht doch bestimmt auch eleganter? welches package benötige ich?
lg und danke,
lise
Verfasst: Mittwoch 31. Januar 2007, 10:03
von jens
"pickle" ist das Stichwort. Such mal im Forum danach
Verfasst: Mittwoch 31. Januar 2007, 11:30
von BlackJack
Oder wenn es wirklich Textdateien werden sollen, das `csv`-Modul.
Verfasst: Mittwoch 31. Januar 2007, 14:23
von lise
danke, javascript:emoticon(':)')
Smile
ich werd' mir das alles mal anschauen. mir ist da inzwischen auch noch eine andere möglichkeit ein- bzw. aufgefallen:
hier ist mein codeschnipsel:
***********************
Code: Alles auswählen
value_table_scipy = scipy.array(value_table)
t_value_table = value_table_scipy.transpose()
[color=orange]def[/color][color=blue]save_valueTable_asText[/color]():
valueTable_txt = scipy.array(t_value_table) [color=red]# wieso muss man hier 'umwandeln'?[/color]
f_txt = [color=indigo]file[/color]([color=green]'save_valueTable_text.dat'[/color], [color=green]'w'[/color])
scipy.io.write_array(f_txt, valueTable_txt)
f_txt.close()
[color=orange]def[/color] [color=blue]read_valueTable_fromText[/color]():
f_txt = [color=indigo]file[/color]([color=green]'save_valueTable_text.dat'[/color], [color=green]'r'[/color])
valueTable_txt = scipy.io.read_array(f_txt)
[color=orange]print[/color] valueTable_txt
[color=orange]global[/color] table
table = valueTable_txt
save_valueTable_asText()
read_valueTable_fromText()
****************************javascript:emoticon(':D')
Very Happy (weil funktioniert...)
sollte einer der meinung sein, das geht definitiv einfacher, eleganter oder
sonst wie günstiger, soll er/sie mir das bitte mitteilen, damit ich mir meinen Rundumblick aufbauen kann; einstweilen läufts erst mal..
lise
Verfasst: Mittwoch 31. Januar 2007, 14:34
von lise
sorry für den buchstabenmüll - hier kommt der code noch mal, da ich das problem gerade noch suche, eben erst mal "ungehighlighted":
***************************
Code: Alles auswählen
def save_valueTable_asText():
valueTable_txt = scipy.array(t_value_table) # warum 'umwandeln'?
f_txt = file('save_valueTable_text.dat', 'w')
scipy.io.write_array(f_txt, valueTable_txt)
f_txt.close()
def read_valueTable_fromText():
f_txt = file('save_valueTable_text.dat', 'r')
valueTable_txt = scipy.io.read_array(f_txt)
print valueTable_txt
global table
table = valueTable_txt
save_valueTable_asText()
read_valueTable_fromText()
***************************
lise
Verfasst: Mittwoch 31. Januar 2007, 14:35
von EnTeQuAk
öhmm kleiner Tipp... deinen gesamten Code einfach in
[/code] einfügen.
sieht dann so aus:
Code: Alles auswählen
#hier steht dann der Code
print 'Test... hier ein farblich hervorgehobenes "print"'
#usw...
und ... es gibt eine EDIT Funktion
MfG EnTeQuAk
Verfasst: Mittwoch 31. Januar 2007, 14:38
von jens
Verfasst: Mittwoch 31. Januar 2007, 14:46
von lise
Code: Alles auswählen
value_table_scipy = scipy.array(value_table)
t_value_table = value_table_scipy.transpose()
def save_valueTable_asText():
valueTable_txt = scipy.array(t_value_table) # warum 'umwandeln'?
f_txt = file('save_valueTable_text.dat', 'w')
scipy.io.write_array(f_txt, valueTable_txt)
f_txt.close()
def read_valueTable_fromText():
f_txt = file('save_valueTable_text.dat', 'r')
valueTable_txt = scipy.io.read_array(f_txt)
print valueTable_txt
global table
table = valueTable_txt
save_valueTable_asText()
read_valueTable_fromText()
Verfasst: Mittwoch 31. Januar 2007, 14:58
von Leonidas
lise hat geschrieben:sollte einer der meinung sein, das geht definitiv einfacher, eleganter oder sonst wie günstiger, soll er/sie mir das bitte mitteilen, damit ich mir meinen Rundumblick aufbauen kann; einstweilen läufts erst mal..
Ja, Serialisierung mit `pickle` ist definitiv einfacher, eleganter und auch sonstwie günstiger.
Verfasst: Mittwoch 31. Januar 2007, 15:01
von lise
ich hätte da noch eine zusätzliche frage:
wie kann ich möglichst einfach (mit meiner Variante, wenn irgendwie geht) alle Werte im Array im Format %.4e schreiben?
lise
Verfasst: Mittwoch 31. Januar 2007, 15:11
von mawe
Passt das zu "Links und Tutorials"? Ich schieb mal ...
Verfasst: Mittwoch 31. Januar 2007, 15:16
von jens
lise hat geschrieben:wie kann ich möglichst einfach (mit meiner Variante, wenn irgendwie geht) alle Werte im Array im Format %.4e schreiben?
Solltest du das nicht besser bei der Ausgabe machen?
So geht's:
Raus kommt:
1.2546e+006
Verfasst: Mittwoch 31. Januar 2007, 17:39
von CM
Hoi,
ich klinke mich wohl etws spät in die Diskussion ein, aber kennt ihr
PyTables? Dieses Modul erleichert mit Sicherheit die Arbeit mit wirklich großen Datensätzen.
Ansonsten bevorzuge ich ja das Verpacken meiner array-Daten in physikalischen Kontext in einer Klasse und
Picklen der Klasseninstanzen.
Ansonsten, lise, zu Deinem Schnipsel: Du mußt umwandeln, weil scipy / numpy nur mit numpy-Arrays verfahren kann. Listen und Tuple müssen vorher konvertiert werden. Außerdem verstehe ich das global-Statement nicht, welchen Sinn soll das haben? Besser wäre es die Daten an die Funktionen zu übergeben und das eine oder andere return-Statement.
Zum Schluß noch meine unmaßgebliche Meinung zum Thema Speichern und Präzission (wobei ich nicht weiß, ob ich die Frage richtig verstanden habe): Niemals (!) runden beim Speichern von Daten. (Eigentlich überhaupt nicht runden, außer vielleicht bei einer finalen Ausgabe, um es schön benutzerfreundlich zu halten.)
Gruß,
Christian
edit: Rechtschreibung
Verfasst: Donnerstag 1. Februar 2007, 09:02
von lise
jens:
so werd' ich's dann also erst mal machen, danke; ursprünglich wollte ich die Daten schon 'schick fertig' speichern, damit man sie mit einem beliebigen anderen Programm auswerten kann und sozusagen immer das gleiche drinsteht (müßte dann nicht dauernd diesselbe Frage beantworten...) Aber da ich die Auswertesoftware wohl gleich mitliefern werde, ist das ja egal...
CM:
PyTables hatte ich auch schon im Auge, sieht bloß irgendwie für's Erste kompliziert aus (und isch hab's n'bissl eilig...)
zum 'global': hab' mir irgendwie eingebildet, daß ich damit eine globale Variable 'definiere'? Vorher hatte ich versucht meine Daten einfach an eine Variable zu übergeben, als eingelesenes Array eben, das ist allerdings fehlgeschlagen, so ging's dann.
lg, lise
Verfasst: Donnerstag 1. Februar 2007, 09:04
von jens
Zum Thema 'global': [wiki]Die global-Anweisung[/wiki]