Seite 1 von 1
Werte eine Schleife in ein Array speichern
Verfasst: Dienstag 15. April 2014, 22:19
von alex2007
Wie speichere ich Werte aus einer Schleife in ein Array?
Angenommen ich habe folgende Funktion:
Code: Alles auswählen
def stand_abb(phi=1.0,p=1.0):
i=0
while i<10:
phi=phi+p
p=p+1*sin(phi)
i=i+1
return
Und ich möchte nun, dass alle "phi"-Werte in ein Array gespeichert werden und dass alle "p"-Werte in ein Array gespeichert werden. Wie mache ich das?
Re: Werte eine Schleife in ein Array speichern
Verfasst: Dienstag 15. April 2014, 22:25
von BlackJack
@alex2007: Listen sind ein Grunddatentyp von Python. Die sollten dementsprechend in jedem Grundlagentutorial vorkommen. Welches benutzt Du denn um Python zu lernen?
Edit: Statt der ``while``-Schleife hätte sich hier übrigens eine ``for``-Schleife mit `range()` bzw. `xrange()` angeboten. Und das ``return`` ist überflüssig. Was soll `stand_abb` bedeuten?
Re: Werte eine Schleife in ein Array speichern
Verfasst: Dienstag 15. April 2014, 22:38
von alex2007
BlackJack hat geschrieben:@alex2007: Listen sind ein Grunddatentyp von Python. Die sollten dementsprechend in jedem Grundlagentutorial vorkommen. Welches benutzt Du denn um Python zu lernen?
Edit: Statt der ``while``-Schleife hätte sich hier übrigens eine ``for``-Schleife mit `range()` bzw. `xrange()` angeboten. Und das ``return`` ist überflüssig. Was soll `stand_abb` bedeuten?
Ich benutze eine Vorlage in Textform, in dem die Grundlagen drin stehen. "stand_abb" steht für Standard-Abbildung. Ich brauche Python für mein Physikstudium und eine erste Aufgabe besteht darin ein Programm zu schreiben, was einen Plot macht, bei welchem mit einem Klick ein Startpunkt festgelegt wird, von welchem ausgehend nach meiner definierten Funktion, 1000 Punkte berechnet werden, welche dann gezeichnet werden sollen. Da ich aber keine 1000 Plotbefehle haben möchte, möchte ich die Werte, die meine Funktion nach jedem mal ausgibt in einem Array speichern, welches dann geplottet wird. Da aber weder ich eine Komplettlösung meiner Aufgabe möchte, noch Ihr mir diese geben werdet, versuche ich mich heranzutasten. Den Plot erzeugen, das Event mit dem Mausklick definieren stellt kein Problem dar. Die Fnktion vom Prinzip her definieren auch. Ich brauche jetzt wie gesagt die richtige herangehensweise wie ich das ganze als Array ausgegeben bekomme. Leider habe ich dazu nichts entsprechendes gefunden. Wahrscheinlich suche ich nach den falschen Begriffen.
Also soll ich eine for-Schleife verwenden? Kannst du mir erklären, wie ich die Werte eines jeden Schrittes alle zusammen in ein Array packe? Bzw. Kannst du mir sagen, nach was ich Suchen muss um meine Antwort zu finden?
Re: Werte eine Schleife in ein Array speichern
Verfasst: Dienstag 15. April 2014, 22:45
von alex2007
Ok, ich glaube ich habe eine Lösung gefunden. Ich poste Sie gleich mal...Moment!
Re: Werte eine Schleife in ein Array speichern
Verfasst: Dienstag 15. April 2014, 22:46
von BlackJack
@alex2007: Das Stichwort ist Liste statt Array. Listen sind einer der Grunddatentypen. Und falls Du `matplotlib` verwendest, kannst Du anstelle eines `numpy`-Arrays auch eine Liste mit Werten übergeben.
Re: Werte eine Schleife in ein Array speichern
Verfasst: Dienstag 15. April 2014, 22:56
von alex2007
@BlackJack: Ist folgende Lösung so ok?
Code: Alles auswählen
def stand_abb(phi=1.0,p=1.0):
i=0
x=range(0)
y=range(0)
while i<10:
phi=phi+p
p=p+1*sin(phi)
x.append(phi)
y.append(p)
i=i+1
return x,y
Du hast gesagt "for"-Schleife hätte sich angeboten. Ist die "while"-Schleife hier weniger gut?
Re: Werte eine Schleife in ein Array speichern
Verfasst: Dienstag 15. April 2014, 23:01
von BlackJack
@alex2007: Bei einer ``for``-Schleife spart man sich das initialisieren und das manuelle hochzählen von `i`. Zwei Zeilen gespart die über Funktion verteilt sind. Eine leere Liste mit ``range(0)`` zu erstellen ist, äh, ungewöhnlich. Sehe ich das erste mal das das jemand macht. Direkter wäre ``list()`` oder ``[]``.
Bist Du sicher das Zeile 7 so aussehen soll? Was ist der Sinn von der Multiplikation mit 1?
Man sollte die beiden Listen vielleicht als Rückgabewert verwenden, sonst ist die Funktion ein wenig sinnfrei.
Re: Werte eine Schleife in ein Array speichern
Verfasst: Dienstag 15. April 2014, 23:08
von alex2007
BlackJack hat geschrieben:@alex2007:
Man sollte die beiden Listen vielleicht als Rückgabewert verwenden, sonst ist die Funktion ein wenig sinnfrei.
Schon getan
BlackJack hat geschrieben:@alex2007:Eine leere Liste mit ``range(0)`` zu erstellen ist, äh, ungewöhnlich. Sehe ich das erste mal das das jemand macht. Direkter wäre ``list()`` oder ``[]``.
Würdest du das als stilistisch "schlecht" ansehen?
BlackJack hat geschrieben:@alex2007:
Bist Du sicher das Zeile 7 so aussehen soll? Was ist der Sinn von der Multiplikation mit 1?
Die 1 ist eigentlich ein K und kann variiert werden. Wir sollen uns für verschiedene K die Plots anschauen und unsere Beobachtungen erklären. Bei der Abgabe der Aufgabe, soll da eine 2.6 hin. Ich hab da nur eine 1 zum rumprobieren hingeschrieben.
PS: wenn dich das ganze interessiert, was wir da eigentlich machen, kann ich dir gern mal den Link per PN schicken!?
Re: Werte eine Schleife in ein Array speichern
Verfasst: Dienstag 15. April 2014, 23:28
von EyDu
alex2007 hat geschrieben:BlackJack hat geschrieben:@alex2007:Eine leere Liste mit ``range(0)`` zu erstellen ist, äh, ungewöhnlich. Sehe ich das erste mal das das jemand macht. Direkter wäre ``list()`` oder ``[]``.
Würdest du das als stilistisch "schlecht" ansehen?
Bei ``list()`` oder ``[]`` ist sofort ersichtlich, dass es sich um eine leere Liste handelt. Bei ``range(0)`` muss man zunächst über die Bedeutung, wenn auch nur kurz, nachdenken. Hinzu kommt, dass Python 3 keine Liste mehr zurückgibt.
alex2007 hat geschrieben:Die 1 ist eigentlich ein K und kann variiert werden. Wir sollen uns für verschiedene K die Plots anschauen und unsere Beobachtungen erklären. Bei der Abgabe der Aufgabe, soll da eine 2.6 hin. Ich hab da nur eine 1 zum rumprobieren hingeschrieben.
Dann gib der Funktion am besten einen entsprechenden Parameter. Solche Kleinigkeiten werden sehr leicht übersehen und führen nur zu nervigen Fehlern und der Suche danach.
Re: Werte eine Schleife in ein Array speichern
Verfasst: Dienstag 15. April 2014, 23:32
von BlackJack
@alex2007: Das ``range(0)`` ist wie gesagt das erste mal das ich so etwas sehe. Besonders deutlich ist das nicht, man muss erst mal kurz nachdenken.
So könnte das mit einer ``for``-Schleife aussehen:
Code: Alles auswählen
def standard_abbildung(phi=1.0, p=1.0, k=2.6, count=10):
x, y = list(), list()
for _ in xrange(count):
phi += p
x.append(phi)
p += k * sin(phi)
y.append(p)
return x, y