我有一个二维数组,表示某个函数f(x,y)的值,我想检测数组中的最小值。 通常情况就是这样,因此很容易发现最小值。
但是有时候会有一种漂移,这意味着实际的最小值不是我要寻找的最小值。
在上面的图像中,我正在寻找的最小值在左侧,但是图像的右侧具有较小的值。
获得对像素精确的精确值对我来说真的很重要,这就是为什么我不能真正使用最大滤镜或类似的东西的原因。 我正在寻找一种计算效率高的方法来检测此最小值,因此我宁愿使用现有方法,也不要自己编写代码。
答案 0 :(得分:0)
要获得2D数组中最小值的索引,我建议如下:
find_smallest = lambda arr: np.unravel_index(np.argmin(arr),arr.shape)
答案 1 :(得分:0)
也许您可以尝试scipy.optimize
中的某些求解器(例如Nelder-Mead)。这些将寻找局部最小值。
然后,为了获得所需的最小值,您可以尝试从不同的随机点启动多个优化,并丢弃最终接近图像边界的解决方案。就是说,假设您的下限在边界之外。这是一个丑陋的方法,可能不是很有效,但是我有点希望它能起作用。另外,您可能必须调整参数。
否则,使用gradient函数可以完成一些魔术。我猜您将不得不寻找一些周围都有正导数的点。