gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:39:33 28 4
gpt4 key购买 nike

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

Hsub = H(2:N,2:N);

Numpy 中的等效代码是什么?我以为np.reshape可能会做我想做的事,但我不确定如何让它只删除目标行,因为我认为如果我 reshape 为 (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):

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

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

关于python - 如何从 2D numpy 数组中删除第一行和最后一行和最后一列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29176339/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com