我有一个由零和{1}组成的数组,我用它作为其他数组的掩码。我试图使用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]])
和tmp1
应该给我正在搜索的矩形的最大值和最小值。 (矩形的横向边缘是固定的,所以没有问题。)
然后我只需要使用tmp2
来创建我想要的矩形轮廓。
找到矩形边的任何其他想法?
编辑:
好的,所以我的面具会是这样的:
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]]
答案 0 :(得分:0)
answer.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)]
注意:如果允许两个或更多矩形在网格上并排,则不会起作用。