Python/Numpy: 如何提取numpy数组任意维度的内部?

Python/Numpy: How to extract interior of any dimension of numpy array?

假设我有一个 numpy 数组 A,它可以是任何维度 len(A.shape) 可以是 1,2,3,..etc。和相应的数组 crop which len(crop) = len(A.shape) 我想使用 crop 提取 A 的内部值。这是二维数组的示例。

    A = np.random.rand(30).reshape([5,6])
    crop = np.array([1,2])

想要的输出:

    A[crop[0]:-crop[0], crop[1]:-crop[1])

假设 crop 的值相对于 A 的大小是合理的。我如何对数组 A 的任何维度执行此操作?

这是 slice notation -

的一种方式
A[tuple([slice(i,-i,None) for i in crop])]

或者用 shorthand np.s_ -

A[tuple([np.s_[i:-i] for i in crop])]

如果每个维度都给出了开始和结束索引,我们可以像 中所示那样做。