Ich habe eine Funktion, die eine Reihe von Parametern hat. Anstatt alle Parameter manuell einzustellen, möchte ich eine Rastersuche durchführen. Ich habe eine Liste möglicher Werte für jeden Parameter. Für jede mögliche Kombination von Parametern möchte ich meine Funktion ausführen, die die Leistung meines Algorithmus auf diese Parameter meldet. Ich möchte die Ergebnisse in einer vieldimensionalen Matrix speichern, so dass ich im Nachhinein nur den Index der maximalen Leistung finden kann, der mir wiederum die besten Parameter geben würde. Hier ist, wie der Code jetzt geschrieben:Elegante Gittersuche in Python/Numpy
param1_list = [p11, p12, p13,...]
param2_list = [p21, p22, p23,...] # not necessarily the same number of values
...
results_size = (len(param1_list), len(param2_list),...)
results = np.zeros(results_size, dtype = np.float)
for param1_idx in range(len(param1_list)):
for param2_idx in range(len(param2_list)):
...
param1 = param1_list[param1_idx]
param2 = param2_list[param2_idx]
...
results[param1_idx, param2_idx, ...] = my_func(param1, param2, ...)
max_index = np.argmax(results) # indices of best parameters!
ich den ersten Teil behalten will, wo ich die Listen definieren, wie sie ist, da ich einfach in der Lage sein will, die Werte zu manipulieren, über die ich suche.
Ich möchte auch mit der Ergebnismatrix so bleiben, wie es ist, da ich visualisieren werde, wie die Änderung verschiedener Parameter die Leistung des Algorithmus beeinflusst.
Das Bit in der Mitte ist jedoch ziemlich repetitiv und sperrig (vor allem, weil ich viele Parameter habe, und ich möchte vielleicht Parameter hinzufügen oder entfernen), und ich denke, es sollte eine prägnantere/elegantere Art geben Um die Ergebnismatrix zu initialisieren, über alle Indizes iterieren und die entsprechenden Parameter einstellen.
Also, gibt es?
sieht aus wie Sie suchen nach 'itertools.product' –
Ahh, in der Tat! Dies wird die Dinge ein wenig vereinfachen! – dlants
so im Wesentlichen, hier ist ein Beinahe-Duplikat: http://stackoverflow.com/questions/1316068/pythonicway-of-iterating-over-3d-array –