matlab / numpy子矩阵轮廓

时间:2015-06-08 09:49:42

标签: matlab numpy submatrix

我正在寻找一种获取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,J 1],A [I1,J1:j0-1:-1],A [I1:I0-1:-1 ,J0]

但是如果j0 == 0,[j1:j0-1:-1]不起作用,因为[j1:-1:-1]返回一个空切片......

编辑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]]

还要感谢所有回答的人,如果你找到了更好的方法,请不要犹豫。

2 个答案:

答案 0 :(得分: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]

答案 1 :(得分: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]