Blatt 3, 1g/2d, Tupel erzeugen

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Blatt 3, 1g/2d, Tupel erzeugen
Hey,

ich stecke gerade bei der einem wahrscheinlich völlig banaelen Problem fest.

Wir sollen ja für die 1g und 2d eine n elementige Liste an Ergebnisvektoren x in ein Tupel speichern und zurückgeben.

Da Tupel wenn einmal festgelegt nicht mehr verändert werden können erscheint mir das als schwierig. Oder sollte ich die Aufgabe missverstehen?

Ich habe es bereits mit der Funktion tupel() versucht, diese wiederum zerstört den Vektor als solchen und speichert nur die einzelnen Werte.
Ausgabe auf der Konsole:
Der Aufruf linsolve(array([[1.]]), array([[1.]]), array([[2.]]), array([[3.]])) liefert das Ergebnis (1.0, 2.0, 3.0), richtig wäre aber (array([[1.]]),array([[2.]]), array([[3.]])).

Gibt es hierfür eine Funktion aus der Python-Libary bzw. einen Hinweis in unseren Kursunterlagen?

Danke schonmal.

Gruß Rotbart


na, dann nehm doch eine list(). diese kannste du sehr leicht in ein tuple vorm returnen verwandeln. :slight_smile:

wie schreibst du denn deine vektoren in das tuple?


Danke nakami für deine Hilfe.

Öhm, … tupel(x) → x ist das array an Lösungen.

Einen anderen Lösungsansatz (auch wenn dieser offensichtlich falsch ist) hatte ich leider nicht.


>>> x = np.array([np.array([[1.]]), np.array([[2.]]), np.array([[3.]])])
>>> tuple(x)
(array([[ 1.]]), array([[ 2.]]), array([[ 3.]]))

also das geht. ich verwende hier ein numpy array um die vektoren-arrays zu gruppieren.
vielleicht hast du in der zuweisung innerhalb des äußeren arrays etwas falsch gemacht?


Wo genau hast du Probleme, das eine in das andere zu konvertieren? Im schlimmsten Fall kannst du das manuell erledigen. Im besten Fall nutzt du paar funktionale Methoden, z. B. map. Wie musst du jeden Tupeleintrag x transformieren („mappen“), damit er ein array([]) wird?


Ich denke mein Problem ist mein beschränktes Wissen über die verschiedenen listenähnlichen Datentypen und deren Verbindungen.
AlgoKs ist mein erster Kontakt zu Python.
Im Übrigen wäre der Lamda-Operator in Python auch mein erster Kontakt zum funktionalen Programmieren. Dieses Semester ist erst PFP dran.

Ziel ist es ja eine variable Menge an Spaltenvektoren in Gestalt von Listen in Arrays zu pressen und diese als Tupel auszugeben.
Wie du an meinem Konsolenauszug siehst sind die Werte die mein Programm ermittelt richtig nur die Representation nicht.
Die Idee von nakami habe ich ausprobiert. Bei dem Versuch aber eine beliebe Anzahl von Positionen mittels einer Schleife generieren wirft der Pythoninterpreter Fehler.
Das Problem scheint hier zu sein, dass das Array im Moment des Erstellen eindimensional ist (Liste) und durch das Einfügen eines Spaltenvektors quasi mehrdimensional wird.
Ich denke wenn ich eine Möglichkeit finde eine Liste von bestimmten Arrayelementen zu erstellen ist das Rätsel gelöst.

Danke

Gruß


solutions = []

for i in bs:
solutions.append(foo(i))

return tuple(solutions)


hast du dir mal die python einführungsfolien angesehen? in 01_pythonintro1-v1.pdf steht auf folie 28 explizit wie du listen mittels ‚+‘ operator oder mittels liste.extend(neue_elemente) erweiterst.

was für einen denn?

du hast bei python standardmäßig keine statische typisierung. du kannst alles mögliche (einzelne np.arrays z.b.) in Listen aufnehmen.


Moin,

ich habe es jetzt hin bekommen. Danke nochmal fuer die Hilfe.

Schoen wird die Abgabe leider trotz alle dem nicht… aber sicherlich die naechste.

Gruss