私は、たくさんのパラメータを持つ関数を持っています。すべてのパラメータを手動で設定するのではなく、グリッド検索を実行する必要があります。私は、各パラメータに可能な値のリストを持っています。すべての可能なパラメータの組み合わせについて、それらのパラメータに対する私のアルゴリズムの性能を報告する関数を実行したい。私はこの結果を多次元の行列に保存したいので、あとで最大のパフォーマンスのインデックスを見つけることができます。これにより、最高のパラメータが得られます。ここでは、コードは現在書かれている方法です。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!
私は-であるように私は簡単に私が検索した上で値を操作できるようにしたいので、私は、リストを定義最初の部分を、維持したいです。
さまざまなパラメータの変更がアルゴリズムのパフォーマンスにどのように影響するかを視覚化するため、結果マトリックスをそのまま使用したいと考えています。
途中のビットはかなり反復して嵩張っています(特にパラメータがたくさんあるので、パラメータを追加したり削除したいかもしれません)、もっと簡潔でエレガントな方法が必要です結果行列を初期化し、すべてのインデックスを反復し、適切なパラメータを設定します。
だから、そこにはありますか?
あなたが 'itertools.product'を探しているようです。 –
ああ、確かに!これはかなり簡単になります! – dlants
本質的に、ここにはほぼ同じです:http://stackoverflow.com/questions/1316068/pythonic-way-of-iterating-over-3d-array –