【问题标题】:How to get subregions of same values in 2D boolean array [duplicate]如何在二维布尔数组中获取相同值的子区域[重复]
【发布时间】:2021-11-10 21:26:18
【问题描述】:
array([[1, 1, 0, 0, 1],
       [1, 0, 0, 0, 0],
       [0, 0, 1, 1, 1],
       [0, 0, 0, 1, 1],
       [1, 0, 1, 1, 0]])

您好,我正在尝试在 python 中找到一种方法来提取布尔数组的索引,其中部分具有相同的值或连续。

理想情况下,我想要每个突出显示部分的索引。

【问题讨论】:

  • 可能是np.where(m)?
  • 当你解释你尝试了什么以及你卡在哪里时,你可能会得到更好的答案。
  • 如果你想要 individual 部分,而不仅仅是所有位置,可能值得查看scipy.ndimage.measurements.label

标签: python arrays numpy matrix boolean


【解决方案1】:
teste = ([[1, 1, 0, 0, 1],
       [1, 0, 0, 0, 0],
       [0, 0, 1, 1, 1],
       [0, 0, 0, 1, 1],
       [1, 0, 1, 1, 0]])

for x in range(len(teste)):
    for y in range(len(teste[x])):
        if teste[x][y] == 1:
            print('ROW: ' + str(x) + ' COL: ' + str(y) + ' IS: ' + str(teste[x][y]))

输出:

ROW: 0 COL: 0 IS: 1
ROW: 0 COL: 1 IS: 1
ROW: 0 COL: 4 IS: 1
ROW: 1 COL: 0 IS: 1
ROW: 2 COL: 2 IS: 1
ROW: 2 COL: 3 IS: 1
ROW: 2 COL: 4 IS: 1
ROW: 3 COL: 3 IS: 1
ROW: 3 COL: 4 IS: 1
ROW: 4 COL: 0 IS: 1
ROW: 4 COL: 2 IS: 1
ROW: 4 COL: 3 IS: 1

【讨论】:

    【解决方案2】:

    那是之前已经回答过的连通分量分析。这是一个修改后的可能解决方案。

        import numpy as np
    from scipy.ndimage.measurements import label
    
    
        def analysis(array):
            labeled, _ = label(array, np.ones((3, 3), dtype=np.int))
            for i in np.arange(1, np.max(labeled)+1):
                pixels = np.array(np.where(labeled == i))
                x1 = np.min(pixels[1, :])
                x2 = np.max(pixels[1, :])
                y1 = np.min(pixels[0, :])
                y2 = np.max(pixels[0, :])
                print(str(i) + ' | slice: array[' + str(y1) + ':' + str(y2) + ', ' + str(x1) + ':' + str(x2) + ']')
        
        
        example1 = np.array([
           [1, 1, 0, 0, 1],
           [1, 0, 0, 0, 0],
           [0, 0, 1, 1, 1],
           [0, 0, 0, 1, 1],
           [1, 0, 1, 1, 0]
        ]).astype(bool)
       
        
        for a in [example1]:
            print(a, '\n')
            analysis(a)
    

    这是输出(没有例子):

    [[...]] 
    
    1 | slice: array[1:2, 3:5]
    2 | slice: array[4:6, 6:8]
    3 | slice: array[8:8, 2:2]
    

    【讨论】:

      猜你喜欢
      • 2020-04-28
      • 2018-02-10
      • 2017-02-20
      • 2015-04-17
      • 1970-01-01
      • 2019-02-10
      • 1970-01-01
      • 2021-11-13
      • 1970-01-01
      相关资源
      最近更新 更多