0

matlab/numpy サブマトリックスの輪郭を取得する方法を探しています。たとえば、私が持っている場合:

A=
[x,x,x,x,x,x,x]
[x,x,x,x,x,x,x]
[x,1,2,3,4,x,x]
[x,5,x,x,6,x,x]
[x,7,8,9,10,x,x]
[x,x,x,x,x,x,x]

[1,2,3,4,6,10,9,8,7,5] をすべてのエッジをスライスしてから連結するよりも速く (つまり、読みやすく) する方法はありますか?

編集:問題は、numpy でのスライスが面倒なことです。たとえば、サブマトリックスを識別する i0,i1,j0,j1 があるとします。

やりたかった: np._r[A[i0,j0:j1+1],A[i0:i1+1,j1],A[i1,j1:j0-1:-1],A[i1:i0 -1:-1,j0]]

ただし、[j1:-1:-1] は空のスライスを返すため、j0==0 の場合は [j1:j0-1:-1] は機能しません...

EDIT 2 : 次のスライスは機能しているようです。本当に良いかどうかはわかりませんが、うまくいくことはできませんでした。

np._r[A[i0,j0:j1+1],A[i0+1:i1+1,j1],(A[i1,j0+1:j1+1])[::-1],(A[i0+1:i1+1,j0])[::-1]]

回答してくれたすべての人に感謝します。より良い方法を見つけた場合は、遠慮なく投稿してください。

4

2 に答える 2

0

これは良い解決策だと思います:

contour = [A(3,2:5) A(4,5) A(5,5:-1:2) A(4,2)];

ここで、輪郭の値は配列[1,2,3,4,5,6,7,8,9,a]になります

于 2015-06-08T10:41:30.290 に答える