【问题标题】:Numpy: Finding the bounding box within a 2d arrayNumpy:在二维数组中查找边界框
【发布时间】:2016-07-08 22:33:01
【问题描述】:

我有一个位于二维数组内的边界框,其中边界框之外的区域被标记为“nan”。我正在寻找一种方法来定位边界框的 4 个角,也就是与“nan”值相邻的值的索引。我可以用“for-loop”的方式来做,但只是想知道是否有更快的方法来做。

对于以下示例,结果应返回行索引 2,4,列索引 1, 4。

[[nan,nan,nan,nan,nan,nan,nan],
 [nan,nan,nan,nan,nan,nan,nan],
 [nan, 0,  7,  3,  3, nan,nan],
 [nan, 7,  6,  9,  9, nan,nan],
 [nan, 7,  9, 10,  1, nan,nan],
 [nan,nan,nan,nan,nan,nan,nan]]

谢谢。

【问题讨论】:

    标签: python arrays python-2.7 numpy bounding-box


    【解决方案1】:

    这将给出两个轴的最大值和最小值:

    xmax, ymax = np.max(np.where(~np.isnan(a)), 1)
    xmin, ymin = np.min(np.where(~np.isnan(a)), 1)
    

    【讨论】:

      【解决方案2】:

      看看np.where:

      import numpy as np
      a = [[nan,nan,nan,nan,nan,nan,nan],
          [nan,nan,nan,nan,nan,nan,nan],
          [nan, 0,  7,  3,  3, nan,nan],
          [nan, 7,  6,  9,  9, nan,nan],
          [nan, 7,  9, 10,  1, nan,nan],
          [nan,nan,nan,nan,nan,nan,nan]]
      
      where_not_nan = np.where(np.logical_not(np.isnan(a)))
      

      你应该可以从where_not_nan获取边界框:

      bbox = [ (where_not_nan[0][0], where_not_nan[1][0]), 
              (where_not_nan[0][0], where_not_nan[1][-1]), 
              (where_not_nan[0][-1], where_not_nan[1][0]), 
              (where_not_nan[0][-1], where_not_nan[1][-1]) ]
      
      bbox
      # [(2, 1), (2, 4), (4, 1), (4, 4)]
      

      【讨论】:

        【解决方案3】:

        您必须检查所有 nan 的矩阵

        row, col = np.where(~np.isnan(matrix))
        r1, c1 = row[ 0], col[ 0]
        r2, c2 = row[-1], col[-1]
        

        【讨论】:

          猜你喜欢
          • 2020-08-25
          • 1970-01-01
          • 2021-06-01
          • 2019-07-05
          • 2017-07-10
          • 1970-01-01
          • 2015-10-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多