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

但是如果 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]]

仍然感谢所有回答的人,如果您找到了更好的方法,请不要犹豫发布。

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 回答
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]在你的情况下返回。

于 2015-06-08T11:11:51.703 回答