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

2024-04-25 06:25:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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个子矩阵(假设在一个列表中)放在一个循环中。你知道吗


Tags: 方法名称列表for切片矩阵数组方向
1条回答
网友
1楼 · 发布于 2024-04-25 06:25:01

现在还不清楚为什么要这样做,但是可以使用^{}动态抓取子阵列:

import numpy as np
arr = np.arange(2*3*4).reshape(2, 3, 4)  # dummy input

arrays = [arr.take(index, axis) for axis in range(arr.ndim) for index in [0,-1]]

此数组列表将按此顺序包含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)]

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

相关问题 更多 >