複雑なことをする前に、6パラメーター関数のパラメーター空間を調べて数値の振る舞いを調べようとしているので、これを行うための効率的な方法を探しています。
私の関数は、6次元のnumpy配列で指定されたfloat値を入力として受け取ります。私が最初にやろうとしたのはこれでした:
最初に、2つの配列を受け取り、2つの配列からの値のすべての組み合わせで配列を生成する関数を作成しました。
from numpy import *
def comb(a,b):
c = []
for i in a:
for j in b:
c.append(r_[i,j])
return c
次に、reduce()
同じ配列のm個のコピーにそれを適用していました。
def combs(a,m):
return reduce(comb,[a]*m)
最後に、次のように関数を評価します。
values = combs(np.arange(0,1,0.1),6)
for val in values:
print F(val)
これは機能しますが、遅すぎます。パラメータのスペースが大きいことは知っていますが、これはそれほど遅くないはずです。この例では106 (100万)ポイントしかサンプリングしておらず、配列を作成するだけで15秒以上かかりましたvalues
。
numpyでこれを行うより効率的な方法を知っていますか?
必要に応じて、関数F
が引数を取る方法を変更できます。