我正在寻找一种获取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]]
还要感谢所有回答的人,如果你找到了更好的方法,请不要犹豫。
答案 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]
。