2015-06-08 2 views
0

Я ищу способ получить контур подматрицы Matlab/numpy. Например, если у меня есть:matlab/numpy submatrix contour

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] быстрее (т.е. более читаемым), чем нарезка каждого края, а затем конкатенировать их?

EDIT: Проблема в том, что нарезка с numpy является назойливой. Например, скажем, у меня есть i0, i1, j0, j1 определить подматрицу:

Я хотел сделать: np._r [A [i0, j0: j1 +-], A [i0: i1 + 1, j1], A [i1, j1: j0-1: -1], A [i1: i0-1: -1, j0]]

Но [j1: j0-1: -1] не работает, если j0 == 0, так как [j1: -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]] 

По-прежнему спасибо всем, кто ответил, если вы нашли лучший способ, не стесняйтесь публиковать сообщения.

ответ

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, а]

0
rows = [2,2,2,2,3,4,4,4,4,3] 
cols = [1,2,3,4,4,4,3,2,1,1] 
A[rows, cols] 

Должно быть возвращено [1,2,3,4,5,6,7,8,9,a] в вашем случае.

+0

Мне все равно нужно создавать строки и столбцы для любых значений i0, j0, i1, j1. – Nihl