私は2つの2D-配列a
とfuncionインサイドb
scipy.optimize関数に大きなステップを強制するには?
を比較する関数compare_images(k, a, b)
を持って、私はsigma=k
私の考えはにために画像a
を滑らかにするためにどのくらい私がしなければならない推定することであるa
にしてgaussian_filter
を適用します画像のようになりb
問題はk
変動が0.5
を超えている場合にのみ、異なる値を返します。私の機能compare_images
ある、と私はfmin(compare_images, init_guess, (a, b)
をすれば、それは通常init_guess
値にはまり込みます。
私はこの問題はfmin
(およびminimize
)である私の場合にはcompare_images
のためにまったく同じ戻り値を再現し、その方法は、それがすでに最小を見つけたと思います非常に小さなステップで始まる傾向があると考えています。それは数回だけ試みます。
fmin
やその他の最小化機能をより大きな手順を踏むようにする方法がありますか?scipy
それとも私の必要性に適した方法がありますか?
編集: 一時的な解決策が見つかりました。 最初に、私はfmin
の引数としてxtol=0.5
以上を使用しました。 それでも、私はまだいくつかの問題があり、数回fmin
はinit_guess
を返します。 その後、fmin == init_guess
の場合、別のランダムなinit_guess
を生成してもう一度やり直すように、単純なループを作成しました。
これはかなり遅いですが、今は走らせています。それは私のすべてのデータのためにそれを実行するには20hかかりますが、私はそれを再度行う必要はありません。とにかく
、より良い、より良い解決策を見つけることにまだ興味がある人のための問題を説明するために:私はいくつかの科学的データを含む、2枚の画像、A
とB
を持って
- 。
A
変数値を持ついくつかのドットのように見える(これは、イベントが発生した場合の各値の点を表し、それは強度だたのマトリクス'S)B
を平滑化ヒートマップのように見える(それが出現の観察密度)B
は、セミランダムノイズのビットを使用してA
にガウスフィルタを適用した場合と似ています。- 定数
sigma
〜A
のガウスフィルタを適用して、B
を近似しています。このsigma
は視覚的に選択されましたが、特定の種類の画像に対してのみ機能します。 - 私は画像ごとに最適な
sigma
を取得しようとしていますので、後でいくつかの関係がsigma
であり、各画像にイベントのクラスが示されています。
とにかく、ありがとう!
だから、あなたはその後、別の最小を探していますか? –
おそらく最良の方法ではありませんが、最も簡単なのは、変数または最小化された値に線形スケーリングを適用することです。 scipy最適化関数にはかなりの数のハードコードされた値があります。 'xtol'で遊ぶことも役に立ちます。 – Daniel
* b *が既に平滑化されていない限り、画像* a *と画像* b *の両方を滑らかにして似ているように思えるかもしれません。その場合、2つの画像の類似度をどのように測定しているかによって、* a *だけに適用されたスムージングは実際にはより類似しているのではなく* b *に似ています。あるいは、 'k 'のバリエーションが0.5未満であっても、類似性のために異なる値を返すように、compare_images()で異なる類似度を使用しようとすることができます。あなたの関数 'compare_images()'を表示すると、人々に提案があるでしょうか? – Simon