python中带索引的for循环切片矩阵

python中带索引的for循环切片矩阵,python,arrays,numpy,indexing,Python,Arrays,Numpy,Indexing,我有一个3D矩阵,例如: array([[[3., 0., 0.], [0., 0., 0.], [0., 0., 0.]], [[0., 0., 0.], [2., 0., 0.], [0., 0., 0.]], [[0., 0., 0.], [12., 0., 0.], [0., 0., 0.]]]) 我想把它切成[:,0,:],[-1,::]。。和所有6个方向的顺序

我有一个3D矩阵,例如:

array([[[3., 0., 0.],
        [0., 0., 0.],
        [0., 0., 0.]],
       [[0., 0., 0.],
        [2., 0., 0.],
        [0., 0., 0.]],
       [[0., 0., 0.],
        [12., 0., 0.],
        [0., 0., 0.]]])
我想把它切成[:,0,:],[-1,::]。。和所有6个方向的顺序与for循环。因此,对于每个维度,从第一个(0)和最后一个(-1)开始切片

应用for循环的正确方法是什么

假设数组的名称为
A

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

我想将这6个子矩阵(比如在一个列表中)放在一个循环中。

完全不清楚为什么要这样做,但可以使用以下方法动态捕获子阵列:

此数组列表将按此顺序包含
arr[0,:,:]
arr[-1,:,:]
arr[:,0,:]
arr[:,-1,:]
等。下面是数组列表中单个元素的证明:

>>> np.array_equal(arr[:,-1,:], arr.take(-1, 1))
True
您的问题对于顺序不是太具体,但是上面的问题可以很容易地概括为您的切片需求的任意顺序:

indices = [0, 0, 0, -1, -1, -1]
axes = [0, 2, 1, 0, 1, 2]
arrays = [arr.take(index, axis) for index,axis in zip(indices, axes)]

这与问题中指定的子阵列顺序相匹配。

您所说的“所有6个方向”和“顺序”是什么意思?如果您给出一个您期望的输出示例,可能会有所帮助。您几乎不需要使用NumPy的循环。最好的答案不太可能涉及循环。如果你能显示出你期望从你的输入中得到什么样的输出,这会很有帮助。这是一个(3,3,3)形状的数组。您需要更明确地说明您想要做什么-结果切片的示例。通常情况下,如果使用类似于
np.arange(24)的数组,操作会更清晰。重塑(2,3,4)
-不同的维度和值。编辑问题以使其更清晰。重塑不是一个选项。
indices = [0, 0, 0, -1, -1, -1]
axes = [0, 2, 1, 0, 1, 2]
arrays = [arr.take(index, axis) for index,axis in zip(indices, axes)]