如何在Numpy数组中找到局部最大值,然后在其附近追踪局部最小值?

时间:2019-07-19 12:07:30

标签: python python-2.7 numpy

如果我有一个像这样的numpy数组:

 np.array([[5, 5, 5, 3,  5, 3, 5, 6, 2, 4],
          [4, 4, 4, 5,  5, 5, 6, 5, 5, 5],
          [3, 3, 6, 5,  5, 6, 5, 4, 4, 6],
          [4, 4, 1, 5,  4, 6, 5, 5, 5, 5],
          [4, 5, 4, 2,  4, 5, 4, 4, 5, 5],
          [5, 5, 7, 7,  3, 2, 4, 4, 5, 4],
          [5, 5, 6, 8,  7, 5, 3, 3, 4, 5],
          [0, 0, 5, 7, 10, 7, 5, 5, 3, 5],
          [0, 0, 5, 6,  6, 8, 7, 6, 5, 3],
          [0, 0, 0, 0,  0, 0, 0, 0, 0, 0]])

如何找到最大值10?然后从它向上最接近的局部最小值是3?

找到局部最小值后,我需要找到围绕该点的局部最小值并对其进行追踪,以得到:

 np.array([[0, 0, 0, 0,  0, 0, 0, 0, 0, 0],
          [0, 0, 0, 0,  0, 0, 0, 0, 0, 0],
          [1, 1, 0, 0,  0, 0, 0, 0, 0, 0],
          [0, 0, 1, 0,  0, 0, 0, 0, 0, 0],
          [0, 0, 0, 1,  0, 0, 0, 0, 0, 0],
          [0, 0, 0, 0,  1, 1, 0, 0, 0, 0],
          [0, 0, 0, 0,  0, 0, 1, 1, 0, 0],
          [0, 0, 0, 0,  0, 0, 0, 0, 1, 0],
          [0, 0, 0, 0,  0, 0, 0, 0, 0, 1],
          [0, 0, 0, 0,  0, 0, 0, 0, 0, 0]])

1 个答案:

答案 0 :(得分:0)

您需要处理一些歧义。听起来像您想要的算法可以执行以下操作:

  1. 找到最大A。这可以通过内置方法完成,但是请注意,可以有多个。您如何选择?
  2. 对于每个元素B,枚举其直接邻居。这包括对角线邻居吗?
  3. 检查B的所有邻居是否都大于B,从而使B成为局部最小值。
  4. 如果B是局部最小值,请计算其与A的距离。什么是距离函数?
  5. 返回距A最小距离的最小值

(请注意,可能有几个局部最小值与最大值之间的距离相等,返回的最小值取决于数组的遍历方式。)