簡體   English   中英

如何(穩健地)在 python 的二維數組上找到局部最小值?

[英]How to (robustly) find a local minimum on a 2D array in python?

我有一個二維數組,它代表某個 function f(x, y) 的值,我想檢測數組上的最小值。 通常它看起來像那樣,所以很容易發現最小值。

示例正常最小值

但有時會有一種漂移,這意味着實際的最小值不是我正在尋找的那個。

示例失敗的最小值

在上圖中,我要查找的最小值在左側,但圖像右側的值較小。

對我來說,獲得一個精確到像素的精確值非常重要,這就是為什么我不能真正使用最大過濾器或類似的東西。 我正在尋找一種計算有效的方法來檢測這個最小值,所以我寧願使用現有的方法而不是編寫自己的代碼。

要獲取二維數組中最小值的索引,我建議如下:

find_smallest = lambda arr: np.unravel_index(np.argmin(arr),arr.shape)

也許您可以嘗試scipy.optimize中的一些求解器(例如Nelder-Mead )。 這些將尋找局部最小值。

然后,為了獲得您正在尋找的最小值,您可以嘗試從不同的隨機點啟動多個優化,並丟棄最終接近圖像邊界的解決方案。 也就是說,假設您的最小值在遠離邊界的某個地方。 這是一種丑陋的方法,可能效率不高,但我有點希望它可以工作。 此外,您可能必須調整參數。

否則, 漸變function 可能會帶來一些魔力。 我想你必須尋找一些周圍都有正導數的點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM