0

我有一个numpy由零和一个组成的二维数组,用作其他数组的掩码。我试图用来matplotlib.contour突出显示绘图上的一个区域,但每次尝试时都会zero-size array to minimum.reduce without identity出错。任何想法?

由于此蒙版是一组矩形,因此我尝试手动查找边缘,但无法正常工作。这是我使用的代码:

tmp1,tmp2 = [],[]
for ii in range(len(mask))[1:-2]:
    if mask[ii+1] - mask[ii] != 1: tmp1.append(mask[ii])
if mask[ii] - mask[ii-1] != 1: tmp2.append(mask[ii]-1)


rect_limits = []
for ii in range(len(tmp1)):
    rect_limits.append([- delta_cont, tmp1[ii], delta_cont, tmp2[ii]])

这样tmp1tmp2应该给我正在搜索的矩形的最大值和最小值。(矩形的侧边是固定的,所以没有问题)。

然后我只需要用来add_patch创建我想要的矩形的轮廓。

找到矩形边缘的任何替代想法?

编辑:

好的,所以我的面具是这样的:

[[0 0 0 0 0 0 0 0 0 0 0 0],
[0 0 0 0 0 0 1 1 1 1 0 0],      
[0 0 0 0 0 0 1 1 1 1 0 0],
[0 0 0 0 0 0 1 1 1 1 0 0],
[0 0 0 0 0 0 0 0 0 0 0 0],
[0 0 0 0 0 0 0 0 0 0 0 0],
[0 0 0 0 0 0 1 1 1 1 0 0],
[0 0 0 0 0 0 1 1 1 1 0 0],
[0 0 0 0 0 0 1 1 1 1 0 0],
[0 0 0 0 0 0 1 1 1 1 0 0]]

理想情况下,我想要的结果是:

[[1,3],[6,9]]

即,使用构建的数组

[[y_start1,y_end1],[y_start2,y_end2],...]
4

1 回答 1

0

答案.py

mygrid = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
          [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0],
          [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0],
          [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0],
          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
          [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0],
          [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0],
          [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0],
          [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0]]

def findEdges(grid)
    y_start = -1
    saved = []
    for lineno, row in enumerate(grid):
        # Case where we don't have a start point
        if y_start == -1 and 1 in row:
            y_start = lineno
        # Case where we have a start point and we just hit a zero row
        if y_start != -1 and 1 not in row:           
            saved.append((y_start, lineno-1))
            y_start = -1
        # Case where we have a start point and hit the end of the table
        if lineno == len(grid)-1 and y_start > 0:
            saved.append((y_start, lineno))

    return saved

print(findEdges(mygrid))

这给出了以下输出:

mike@example ~ $ python answer.py
[(1, 3), (6, 9)]

注意:如果允许两个或多个矩形并排在网格上,这将不起作用。

于 2013-01-25T11:55:56.027 回答