In Python Array auslesen und interpretieren?

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.
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

"lookup_seq" ist ein selbstdefinerte Variable:

Code: Alles auswählen

In [2]: a, b, c = [1, 2, 3]

In [3]: lookup_seq = a, c 

In [4]: lookup_seq
Out[4]: (1, 3)
Bei numerix könntest Du nach Zeile 8 schreiben

Code: Alles auswählen

a, b, c = seq
lookup_seq = a, c
if lookup_seq in events:
....
oder auch gleich direkt:

Code: Alles auswählen

if ((seq[0], seq[2])) in events:
...
(Ist mein Code so unverständlich? .... :cry: ...)
:wink:
yipyip
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

also mal angenommen ein frame is so aufgebaut:

[startflag, ack, seq, data, crc, endflag]

und data kann die werte 1, 2, 3 annehmen.

dann willst du ernsthaft data folgendermaßen verarbeiten:

Code: Alles auswählen

if frame == [startflag, ack, seq, 1, crc, endflag]: (...)
elif frame == [startflag, ack, seq, 2, crc, endflag]: (...)
elif frame == [startflag, ack, seq, 3, crc, endflag]: (...)
else: print "w0t?"
http://www.kinderpornos.info
gooogle
User
Beiträge: 66
Registriert: Freitag 15. Mai 2009, 19:13
Wohnort: burghausen

yipyip

danke :) nein dein code ist übersichtlich aber ich wollte es erstmal ohne Klassen versuchen ;) wie gesagt bin noch amateur in diesem gebiet. habe bislang nur in C programmiert und python für mich noch etwas ungewohnt.

habe versucht beide versionen unter python auszuführen aber erhalte kein ergebnis. gibt es einen trick? oder verwende ich den falschn pyhton editor (Python 3.0 IDLE (GUI))?

Dill

nee..was in den puffer geladen wird, sind nur die daten und die kennezeichnung eines frame anfangs bzw ende ;)
fff gh
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

(Arrgh... grad wollte ich die Antwort abschicken, kommt ein
"Failed to connect"...)

Also bei mir mit Python 2.5 funktionierts, auch in Idle
erscheint die stdout-Ausgabe in der Python-Shell.
Mit 3.x habe ich mich noch nicht beschäftigt,
vielleicht reicht es ja, die print-Befehle anzupassen.
:wink:
yipyip
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

bei "34, 00, 78, 89, 01, 11, 88" sind also keine flags mehr dabei?
warum braucht es 7 byte dafür?
http://www.kinderpornos.info
gooogle
User
Beiträge: 66
Registriert: Freitag 15. Mai 2009, 19:13
Wohnort: burghausen

Hallo
Dill,
weil da noch mehr Infos drin stehen die mich nicht interessieren ausser dem speziellen ;)



Grüsse :)
Zuletzt geändert von gooogle am Samstag 6. März 2010, 17:47, insgesamt 1-mal geändert.
fff gh
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

Ok, das mit dem

Code: Alles auswählen

a, b, c = seq
hat Dich etwas auf die falsche Fährte geführt.
(mein Fehler, wollte nur ein einfaches, allgemeines Beispiel geben).

Die Sequenzen können ja beliebige Länge haben.
Im obigen Fall muss die Sequenz aber genau 3 Elemente besitzen.

Deshalb hier noch etwas Experimentiercode, abgeleitet von
numerix' Beispiel:

http://paste.pocoo.org/show/117815/

:wink:
yipyip
gooogle
User
Beiträge: 66
Registriert: Freitag 15. Mai 2009, 19:13
Wohnort: burghausen

Hallo yipyip

sitze gerade vor dem code und versuche es nachzuvollziehen. ich habe mal den code mit komentaren versehen, damit du siehst ob ich es richtig verstanden gabe ;)
Zuletzt geändert von gooogle am Samstag 6. März 2010, 17:47, insgesamt 1-mal geändert.
fff gh
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

Habe das jetzt so verstanden, dass Du die Indizes und
deren Anzahl flexibel halten möchtest.

Dann musst Du eben die zu untersuchenden Indizes definieren
und eine Funktion schreiben, die mit deren Hilfe die Sequenz auf
eine Liste der benötigten "lookup-Sequenzen" abbildet.

Habe das hier ziemlich zusammengehackt, hoffe, es
reicht als weiterer Ausgangspunkt.

http://paste.pocoo.org/show/117925/

:wink:
yipyip
Zuletzt geändert von yipyip am Dienstag 19. Mai 2009, 00:25, insgesamt 2-mal geändert.
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

Was genau muss ich ändern, um auch grössere elemente zu analysieren:
Du konntest schon immer längere Sequenzen analysieren.
Nur bei

Code: Alles auswählen

lookup_seq = seq[0], seq[2]
muss die Sequenz mindestens die Länge 3 haben,
da sonst "seq[2]" einen IndexError auswirft.
Es hängt nur davon ab, welchen maximalen Index
Du für die lookup-Sequenz verwenden willst.
Ist dieser zu gross, kann die zu untersuchende Sequenz sofort verworfen werden.

:wink:
yipyip
gooogle
User
Beiträge: 66
Registriert: Freitag 15. Mai 2009, 19:13
Wohnort: burghausen

Hallo yipyip,

Ich hab es mal ausprobiert und es funktioniert soweit ganz gut :)
Allerdings wenn man sich den Output ansieht, so sieht man dass beide Tuple Listen angezeigt werden, z.B. (8, 2, 0, 6, 77) (8, 2, 0, 6) . ich bräuchte aber nur das erstere immer, also z.B. (8, 2, 0, 6, 77) --> 144.3 --> Relais on
Zuletzt geändert von gooogle am Samstag 6. März 2010, 17:47, insgesamt 1-mal geändert.
fff gh
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

Das Problem ist nicht die Ausgabe
(da muss man doch nur die print-Befehle richtig schreiben),
sondern die Tatsache, dass Dein 'Time'
mit dem event-Dictionary verknüpft ist.
Es sollte aber nur zum 'puffer' gehören.

Der Einfachheit halber habe ich jetzt angenommen,
dass jede Zahl in 'puffer' mit einem Timestamp versehen ist.
Für die Zeit einer Ereignismeldung wird der Timestamp des Markers verwendet.
(Wie das genau bei Dir aussieht und wie Du das anpassen
musst, sei erstmal dahingestellt.)

In 'etwas schöner':
http://paste.pocoo.org/show/118031/

Bücher/Doku? ...gibts doch genug:
Original Doku, Learning Python, Programming Python,
Core Python, A Byte of Python, Dive into Python, ...
...entweder im Internet oder in der Uni-Bib Deines Vertrauens.

:wink:
yipyip
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

...hier noch ein kleines Update:
http://paste.pocoo.org/show/118070/
:wink:
yipyip
gooogle
User
Beiträge: 66
Registriert: Freitag 15. Mai 2009, 19:13
Wohnort: burghausen

Hallo yipyip

danke dir :) muss mich etwas sammeln, soviele Funktionen und neue Varianten...da muss man sich erst etwas dran gewöhnen ;)

eine frage noch, was genau bedeutet dies:

return [s for s in result if s]

im kommentar steht dass es leere listen rauswirft, aber wie das genau gemacht wird ist mir ein rätsel. komme mit dem s for s in result if s nicht klar :( heisst das dass eine forschleife erzeugt wird die das result[] durchkämmt und alles was s, also Listen, sind zurückgibt?
fff gh
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

Das ganze nennt sich "List Comprehension" und ist an die
mathematische Mengennotation angelehnt.
Erster Anlaufpunkt:
http://docs.python.org/tutorial/datastr ... rehensions

In diesem Fall bedeutet das:
Erzeuge eine Liste mit Objekten s aus result,
wobei bool(s) == True gelten soll.
Falls s == [] (die leere Liste), dann hat s den Wahrheitswert 'False',
wird also nicht mit aufgenommen.
Somit werden in unserem Fall nur die Listen gesammelt,
die nicht leer sind und leere Listen (die aufgrund der Schleifenlogik vorkommen können) aussortiert.

:wink:
yipyip
gooogle
User
Beiträge: 66
Registriert: Freitag 15. Mai 2009, 19:13
Wohnort: burghausen

Hallo yipyip

ich sitze gerade wieder an Python (learning by doing ;) ) und versuche mich gerade selbst an das Einfügen des Time stamps für die jeweiligen sequenzen bzw message markers.
Zuletzt geändert von gooogle am Samstag 6. März 2010, 17:48, insgesamt 1-mal geändert.
fff gh
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

Zunächst:
1) Umlaute in den Kommentaren müssen nicht unbedingt sein,
sonst muss ich bei mir immer " -*- coding: utf-8 -*- " obendrüber schreiben. ;-)
2) Damit das Forum hier nicht vollständig zusammenbricht,
den Code lieber nach http://paste.pocoo.org/ auslagern
und hier verlinken.

Die Hauptfrage ist:
Wie sind die Timestamps mit Deinem Sequenzbuffer 'puffer' assoziiert?
Existiert für jeden Index i eine Zahl z aus 'puffer' und ein t aus 'Time'?
Oder hast Du eine Abbildung
{Indexmenge der Timestamps} -> {Indexmenge von 'puffer'}
die jedem Timestamp t(i) eine Zahl z(j) aus 'puffer' zuordnet?

Soweit ich das verstanden habe, sind die Timestamps doch nur
eine Zusatzinformation, die zum Schluss mitausgegeben werden soll, haben also in
'seq_to_lookupseq' nichts verloren.
(Deshalb habe ich das Ganze auch so organisiert wie in meinem
letzten Beispiel.)
Mit den Timestamps soll doch nicht gesucht werden?

Versuche noch mal, mein letztes Beispiel durchzugehen
und alles Neuartige mit kleinen Beispielen in der Pythonshell
nachzuvollziehen.
(Bei Deinem Code:
Wenn nix Sinnvolles bzw. Fehler bei rauskommen, kann das Alles
so nicht richtig sein...)
Also:
- Wie hängen die Timestamps mit der Sequenz zusammen?
- Python lernen !

:wink:
yipyip
Zuletzt geändert von yipyip am Donnerstag 21. Mai 2009, 18:50, insgesamt 1-mal geändert.
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

Deine Version "in funktionierend"
(aber nicht grossartig ausgetestet)
http://paste.pocoo.org/show/118396/
8)
yipyip
gooogle
User
Beiträge: 66
Registriert: Freitag 15. Mai 2009, 19:13
Wohnort: burghausen

Hallo yipyip

ja da hast du recht. der time stamp gehört nicht in der funktion.

also der time stamp wird nur für jeden marker rausgegeben, weil der marker angibt wann eine neue message/frame vorliegt.
der timestamp puffer wid parallel zum daten puffer gefüllt.
also immer wenn eine neue message vorliegt (Marker) wird die aktuelle Zeit im Time puffer gespeichert. beispiel:

time=[2, 8, 10]
puffer=[5, 999, 1,2,3,4,5, 999, 0,9, 999]

Also die puffer legen so in etwa vor und man braucht keinen timestamp von python aus definieren ;) einfach davon ausgehen dass beide puffer vorlegen.

nun möchte ich wie schon besprochen sowas realisieren:

time 2: (5) --> Relais aktiviert
time 8: (1,2,3,4,5) --> Relais deaktiviert
time 10: (0,9) --> Relais smells funny

Also für jeden Marker den Time stamp rausfiltern ;)
1. Marker --> 0-tes element aus time puffer
2. marker--> 1-tes element aus time puffer
usw ;)

Hoffe jetzt hat man mich verstanden?..drücke mich manchmal etwas schwierig aus ;)

Grüsse
fff gh
gooogle
User
Beiträge: 66
Registriert: Freitag 15. Mai 2009, 19:13
Wohnort: burghausen

P.S.: Kennst du vielleicht einen besseren Editor als Python shell?

so einen wie bei C Programmierung, wo man den Code reinschreibt und am ende kompiliert bzw ausführt und das ergebnis bekommt? :)
so einen ditor müsste es doch auch geben oder?

Grüsse :wink:
fff gh
Antworten