mehrdimensionale arrays als ascii speichern

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
lise
User
Beiträge: 8
Registriert: Mittwoch 31. Januar 2007, 09:28

Mittwoch 31. Januar 2007, 09:46

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
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Mittwoch 31. Januar 2007, 10:03

"pickle" ist das Stichwort. Such mal im Forum danach ;)

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
BlackJack

Mittwoch 31. Januar 2007, 11:30

Oder wenn es wirklich Textdateien werden sollen, das `csv`-Modul.
lise
User
Beiträge: 8
Registriert: Mittwoch 31. Januar 2007, 09:28

Mittwoch 31. Januar 2007, 14:23

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
lise
User
Beiträge: 8
Registriert: Mittwoch 31. Januar 2007, 09:28

Mittwoch 31. Januar 2007, 14:34

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
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Mittwoch 31. Januar 2007, 14:35

öhmm kleiner Tipp... deinen gesamten Code einfach in

Code: Alles auswählen

[code=py]#hier steht der Code
[/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 :D

MfG EnTeQuAk
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Mittwoch 31. Januar 2007, 14:38


CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
lise
User
Beiträge: 8
Registriert: Mittwoch 31. Januar 2007, 09:28

Mittwoch 31. Januar 2007, 14:46

:lol:

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() 
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mittwoch 31. Januar 2007, 14:58

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.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
lise
User
Beiträge: 8
Registriert: Mittwoch 31. Januar 2007, 09:28

Mittwoch 31. Januar 2007, 15:01

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
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Mittwoch 31. Januar 2007, 15:11

Passt das zu "Links und Tutorials"? Ich schieb mal ...
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Mittwoch 31. Januar 2007, 15:16

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:

Code: Alles auswählen

print "%.4e" % 1254634.435345
Raus kommt:
1.2546e+006

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Mittwoch 31. Januar 2007, 17:39

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
lise
User
Beiträge: 8
Registriert: Mittwoch 31. Januar 2007, 09:28

Donnerstag 1. Februar 2007, 09:02

:)

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
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Donnerstag 1. Februar 2007, 09:04

Zum Thema 'global': [wiki]Die global-Anweisung[/wiki]

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten