Appropos Arrays... (Pure Python)

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.
Benutzeravatar
akis.kapo
User
Beiträge: 127
Registriert: Freitag 1. September 2006, 12:58

Appropos Arrays... (Pure Python)

Beitragvon akis.kapo » Dienstag 5. September 2006, 14:56

Sind ja grad viele nuub-Threads zu Arrays offen,
da fasse ich kurz und bündig Mut und traue mich
auch meine doofe Frage bzgl. Arrays und Python zu stellen.

Gibts echt keine schönere, kürzere Methode in (pure) Python
mehrdimensionale Arrays zu definieren?

In Java kann man ein 100x1000x10000 Array in einer Zeile erzeugen.
(erzeugen != mit Werten füllen)

Hier mein Testcase:

Code: Alles auswählen

#!/usr/bin/python -O

def create_video_buffer(width,height,frames):
    #consistency checking routines
    width  = int(abs(width))  % 1920    #respectfully
    height = int(abs(height)) % 1080    #limiting x,y res,
                                        #to high-definition,
    frames = int(abs(frames))           #but not length

    #initializationa
    video_buffer = []
    if width and height and frames:     #w,h,f must be > 0
        for w in range(width):
            video_buffer.append([])
            for h in range(height):
                video_buffer[w].append([])
                for f in range(frames):
                    video_buffer[w][h].append([])
                    for c in range(3):  #color components rgb
                        video_buffer[w][h][f].append(0)
        return video_buffer


Ich merke an das ist wirklich nur ein Testcase, bitte keine verweise auf Fertiglösungen im Videobereich. :wink:

Das da oben will ich kürzer haben, aber höchstens in Python enthaltene Module nutzen.
Das Array Modul hab ich mir schon mal angeguckt, nur irgendwie konnte ich das nicht nutzen, bin vielleicht zu blöd, aber es scheiterte an so sachen wie:
video_buffer.append(array('c', [chr(0),chr(0),chr(0)]))
und so Anwendungskleinigkeiten, die ich nicht verstanden habe.

Danke für Hilfe im voraus. :)
Benutzeravatar
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Beitragvon mitsuhiko » Dienstag 5. September 2006, 15:32

Erstens sind das Listen und nicht Arrays. Wenn du Arrays suchst schau dir mal das "array" Modulean und zweitens kannst du listen wunderbar mit verketteten list comprehensions und xrange/range oder was auch immer füllen.
TUFKAB – the user formerly known as blackbird
Benutzeravatar
akis.kapo
User
Beiträge: 127
Registriert: Freitag 1. September 2006, 12:58

Beitragvon akis.kapo » Dienstag 5. September 2006, 15:51

Wie könnte man obigen Code speichereffizient auf Arrays umstellen?
Wie gesagt ich habe leider kein Glück gehabt mit dem Array Module.

python interpreter:
>>> import array
>>> mein_array = array('c', 'hello world')
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: 'module' object is not callable


Tjo, da endete meine Array-Lesson.

Könnte mich vielleicht jemand etwas ausführlicher "zum Schotter" führen? :P

PS: aus http://docs.python.org/lib/module-array.html
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Beitragvon Rebecca » Dienstag 5. September 2006, 15:56

So geht's:

Code: Alles auswählen

>>> import array
>>> mein_array = array.array('c', 'hello world')
>>>
Benutzeravatar
akis.kapo
User
Beiträge: 127
Registriert: Freitag 1. September 2006, 12:58

Beitragvon akis.kapo » Dienstag 5. September 2006, 19:53

Rebecca hat geschrieben:So geht's:


Ouch. :oops:
Benutzeravatar
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Beitragvon Joghurt » Dienstag 5. September 2006, 22:05

BTW: Die Option -O bringt nicht wirklich was.

Das einzige, was passiert, ist dass "assert"-Befehle nicht mehr ausgeführt werden, und Docstrings aus dem Bytecode entfernt werden.
Benutzeravatar
akis.kapo
User
Beiträge: 127
Registriert: Freitag 1. September 2006, 12:58

Beitragvon akis.kapo » Dienstag 5. September 2006, 22:13

Kann ich nicht wirklich wissen, da die "-h" Option was anderes verkündet,
ausserdem dacht ich mir es schadet nicht, schliesslich verwendet das selbst
Portages "emerge", da dacht ich mir: wenn selbst die gentoo-devs es nutzen,
ists wohl "stabil genug" für mich. :?

Trotzdem thx für die Tipps. :D
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Mittwoch 6. September 2006, 11:15

akis.kapo hat geschrieben:ausserdem dacht ich mir es schadet nicht, schliesslich verwendet das selbst
Portages "emerge", da dacht ich mir: wenn selbst die gentoo-devs es nutzen,
ists wohl "stabil genug" für mich. :?

Schaden tut es natürlich nicht, aber viel bringen - auch nicht. Es ist natürlich stabil, deswegen wird nichts kaputtgehen, also kannst du es natürlich problemlos nutzen.

-O macht genau das, was Joghurt erzählt hat, und darüber hinaus setzt es die Variable __debug__ von True auf False.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
akis.kapo
User
Beiträge: 127
Registriert: Freitag 1. September 2006, 12:58

Beitragvon akis.kapo » Mittwoch 6. September 2006, 13:04

Katalawa... ;-)
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Beitragvon birkenfeld » Mittwoch 6. September 2006, 14:22

Joghurt hat geschrieben:Das einzige, was passiert, ist dass "assert"-Befehle nicht mehr ausgeführt werden, und Docstrings aus dem Bytecode entfernt werden.


Letzteres allerdings erst bei -OO.

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]