Busca de grade elegante em python / numpy

Eu tenho uma função que tem vários parâmetros. Em vez de configurar todos os parâmetros manualmente, quero realizar uma pesquisa de grade. Eu tenho uma lista de valores possíveis para cada parâmetro. Para cada combinação possível de parâmetros, eu quero executar minha função que relata o desempenho do meu algoritmo nesses parâmetros. Eu quero armazenar os resultados disso em uma matriz multidimensional, para que depois eu possa encontrar o índice do desempenho máximo, o que me daria os melhores parâmetros. Aqui está como o código está escrito agora:

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!

Eu quero manter a primeira parte, onde eu defino as listas como estão, desde que eu quero facilmente ser capaz de manipular os valores sobre os quais eu procuro.

Eu também quero acabar com a matriz de resultados como está, já que vou estar visualizando como a mudança de diferentes parâmetros afeta o desempenho do algoritmo.

O bit no meio, no entanto, é bastante repetitivo e volumoso (especialmente porque eu tenho muitos parâmetros, e eu poderia querer adicionar ou remover parâmetros), e eu sinto que deveria haver uma maneira mais sucinta / elegante de inicializar os resultados. matriz, iterar sobre todos os índices e definir os parâmetros apropriados.

Então, existe?

questionAnswers(4)

yourAnswerToTheQuestion