Элегантный поиск по сетке в 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!
Я хочу сохранить первую часть, где я определяю списки как есть, так как я хочу легко иметь возможность манипулировать значениями, по которым я ищу.
Я также хочу закончить с матрицей результатов, как есть, так как я буду визуализировать, как изменение различных параметров влияет на производительность алгоритма.
Хотя немного посередине, он довольно повторяющийся и громоздкий (особенно потому, что у меня много параметров, и я могу захотеть добавить или удалить параметры), и я чувствую, что должен быть более лаконичный / элегантный способ инициализации результатов матрица, итерации по всем индексам, и установить соответствующие параметры.
Так есть?