Elegante Gittersuche in Python / Numpy

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 der möglichen 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 für diese Parameter meldet. Ich möchte die Ergebnisse in einer vieldimensionalen Matrix speichern, damit ich nach Worten nur den Index der maximalen Leistung finden kann, der mir wiederum die besten Parameter geben würde. So wird der Code jetzt geschrieben:

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 möchte den ersten Teil behalten, in dem ich die Listen so definiere, wie sie sind, da ich die Werte, über die ich suche, leicht manipulieren kann.

Ich möchte auch die Ergebnismatrix so wie sie ist erhalten, da ich visualisieren werde, wie sich das Ändern verschiedener Parameter auf die Leistung des Algorithmus auswirkt.

Das Bit in der Mitte ist jedoch ziemlich repetitiv und sperrig (insbesondere, weil ich viele Parameter habe und möglicherweise Parameter hinzufügen oder entfernen möchte), und ich denke, dass es eine prägnantere / elegantere Methode geben sollte, um die Ergebnisse zu initialisieren Matrix, iterieren Sie über alle Indizes und legen Sie die entsprechenden Parameter fest.

Also, ist da?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage