0

numpy他の配列のマスクとして使用する0と1から作成された2D配列があります。プロット上の領域を強調表示するために使用しようとし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長方形の輪郭を作成する必要があります。

長方形のエッジを見つけるための代替案はありますか?

編集:

OK、私のマスクは次のようになります:

[[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

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)]

注:これは、グリッド上で2つ以上の長方形を並べることが許可されている場合は機能しません。

于 2013-01-25T11:55:56.027 に答える