Automatisierung von Variablenvariation

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
Benutzeravatar
Grizzly
User
Beiträge: 34
Registriert: Sonntag 10. Februar 2013, 21:18

Hallo Zusammen,

ich habe ein Model das verschiedene Inputs verwendet um Outputs zu berechnen. Nun möchte ich die Inputvariablen variieren um den Effekt auf die Outputvariablen zu analysieren. Habe ich also z.B. 3 verschiedene Inputs a,b und c mit jeweils 10 unterschiedlichen Werten (0-9) ergeben sich 10^3 mögliche Kombinationen mit denen ich mein Model füttere und somit 10^3 Modelläufe. Um nun nicht 1000 Files zu schreiben möchte ich den Prozess automatisieren. Wie mache ich das nun am Besten ?

Schreibe ich ein "Steuerscript", welches die Variablen variiert, sie dem Model übergibt und es dann startet. Schließlich 1000 Outfiles mit unterschiedlichen Namen erzeugt oder welche Möglichkeiten sind denn da geläufig ?

Ich hoffe die Beschreibung ist soweit einleuchtend, Vielen Dank für eure Antworten schonmal !
Grizzly
BlackJack

@Grizzly: Ich sehe die Frage nicht wirklich, denn Du beantwortest die vorhandene Frage ja selber. Wo ist das konkrete Problem?
Dingels
User
Beiträge: 61
Registriert: Dienstag 23. Dezember 2008, 19:50

Das Variieren der Variablen kannst Du mittels `itertools.product` lösen:

Code: Alles auswählen

>>> from itertools import product

>>> inp = range(10)
>>> for comb in product(inp, repeat=3):
...    print comb
(0, 0, 0)
(0, 0, 1)
(0, 0, 2)
(0, 0, 3)
(0, 0, 4)
(0, 0, 5)
(0, 0, 6)
(0, 0, 7)
(0, 0, 8)
(0, 0, 9)
(0, 1, 0)
(0, 1, 1)
(0, 1, 2)
(0, 1, 3)
(0, 1, 4)
(0, 1, 5)
(0, 1, 6)
(0, 1, 7)
(0, 1, 8)
(0, 1, 9)
usw. 
Natürlich kannst Du die Ergebnisse für jede Kombination in Dateien schreiben. Ist wahrscheinlich auch sinnvoll, allein schon um sich die Werte später noch mal anschauen zu können und ein Backup zu haben. Du kannst die Werte natürlich auch in einem Dictionary speichern mit der Tuple-Kombination als Key und der Ausgabe deines Programms als Value, zum Beispiel. Da gibt es viele Möglichkeiten und keine Standardlösung.
Benutzeravatar
Grizzly
User
Beiträge: 34
Registriert: Sonntag 10. Februar 2013, 21:18

Hallo,

vielen Dank für eure Antworten und Sorry für die verspätete Antwort (Ich war im Urlaub...)
Itertools product kenne ich, wie kann ich jedoch Werte meiner Wahl verwenden ?
also z.B. a = 1.21, 2.34, usw.

Auch bei dem speichern der Outputs unter den verschiedenen filenames habe ich Probleme.
Wie würde es denn gehen den filename automatisch auf die verwendeten werte zu setzten und die entsprechenden Lösungen der Kombinationen hineinzushreiben ?

Als Beispiel:
a = 1.21, 2.34, 3.56, -2.54
b = 99.1, 98.8, 97.5, 96.4
c = 60, 70, 80, 90

jetzt soll z.B. im main gerechnet werden x = a+b-c und y = a*b*c mit den jeweiligen Kombinationen von a,b und c (also laut Kombinatorik 4**3 Möglichkeiten) und die Ergebnisse x und y in verschiedene files mit z.B. dem filenamen a_1.21_b_97.5_c_70.txt geschreiben werden.
Ich hoffe das ist einleuchtend ... ?

Mein eigentliches Programm ist umfangreicher, aber vom Prinzip das gleiche Problem: Variablen meiner Wahl mit allen möglichen Kombinationen verwenden und das Ergebnis in wiederauffindbare Dateien schreiben. Eben den Prozess der Variation, Namensgebung und Speicherung automatisieren...
Vielen Dank für eure Ideen
BlackJack

@Grizzly: Das sollte mit `itertools.product()` möglich sein. Man muss da ja nicht das selbe Argument mit `repeat` wiederholen, sondern kann verschiedene angeben. Und den Dateinamen erstellt man dann einfach in dem man die Werte in eine Zeichenkette formatiert. Wenn Dir der ``%``-Operator oder die `format()`-Methode auf Zeichenketten nichts sagen, dann solltest Du Dein aktuelles Problem beiseite legen und Dich erst einmal mit den Python-Grundlagen beschäftigen.
Antworten