Python 如何从2D numpy数组中删除第一行和最后一行和列?

Python 如何从2D numpy数组中删除第一行和最后一行和列?,python,matlab,numpy,matrix,Python,Matlab,Numpy,Matrix,我想知道如何在numpy中从2D数组中删除第一行和最后一行和列。例如,假设我们有一个名为H的(N+1)x(N+1)矩阵,那么在MATLAB/Octave中,我使用的代码是: Hsub = H(2:N,2:N); Numpy中的等效代码是什么?我想这可能会达到我想要的效果,但我不确定如何让它只删除目标行,因为我认为如果我将其重塑为(N-1)x(N-1)矩阵,它将删除最后两行和列 这个怎么样 Hsub = H[1:-1, 1:-1] 1:-1范围意味着我们从第二个索引或1访问元素,并向上移动到最

我想知道如何在numpy中从2D数组中删除第一行和最后一行和列。例如,假设我们有一个名为
H
(N+1)x(N+1)
矩阵,那么在MATLAB/Octave中,我使用的代码是:

Hsub = H(2:N,2:N);
Numpy中的等效代码是什么?我想这可能会达到我想要的效果,但我不确定如何让它只删除目标行,因为我认为如果我将其重塑为
(N-1)x(N-1)
矩阵,它将删除最后两行和列

这个怎么样

Hsub = H[1:-1, 1:-1]
1:-1
范围意味着我们从第二个索引或
1
访问元素,并向上移动到最后第二个索引,如维度的
-1
所示。我们独立地对这两个维度执行此操作。当对两个维度分别执行此操作时,结果是访问每个维度的方式的交点,这基本上就是切掉第一行、第一列、最后一行和最后一列

记住,结束索引是独占的,因此如果我们做了
0:3
,例如,我们只得到维度的前三个元素,而不是四个

此外,负索引意味着我们从端访问数组
-1
是在特定维度中要访问的最后一个值,但由于排他性,我们将访问最后一个元素,而不是最后一个元素。基本上,这与执行以下操作相同:

Hsub = H[1:H.shape[0]-1, 1:H.shape[1]-1]
。。。但使用负指数要优雅得多。您也不必使用行数和列数来提取所需内容。上面的语法是维度无关的。但是,您需要确保矩阵至少为3 x 3,否则会出现错误

小额奖金 在MATLAB/Octave中,您可以通过以下方式实现相同的目标,而无需使用尺寸:

Hsub = H(2:end-1, 2:end-1);
关于索引的
end
关键字意味着获取特定维度的最后一个元素

示例使用 下面是一个示例(使用IPython):

如您所见,第一行、第一列、最后一行和最后一列已从源矩阵
H
中删除,其余部分已放入输出矩阵
Hsub

In [1]: import numpy as np

In [2]: H = np.meshgrid(np.arange(5), np.arange(5))[0]

In [3]: H
Out[3]: 
array([[0, 1, 2, 3, 4],
       [0, 1, 2, 3, 4],
       [0, 1, 2, 3, 4],
       [0, 1, 2, 3, 4],
       [0, 1, 2, 3, 4]])

In [4]: Hsub = H[1:-1,1:-1]

In [5]: Hsub
Out[5]: 
array([[1, 2, 3],
       [1, 2, 3],
       [1, 2, 3]])