Python 如何将3D矩阵拆分为列表中排列的3D矩阵?

Python 如何将3D矩阵拆分为列表中排列的3D矩阵?,python,numpy,scipy,Python,Numpy,Scipy,我有一个NumPy数组,形状如下: (1532, 2036, 5) (1532, 2036) 我想生成一个数组列表,其中每个数组都具有以下形状: (1532, 2036, 5) (1532, 2036) 可以使用以下命令对三维阵列进行切片: [x[:,:,i] for i in range(5)] 上面将为您提供一个二维阵列列表 对于多维阵列,可以缩放相同的过程您可以使用 [x[:,:,i] for i in range(5)] 上面将为您提供一个二维阵列列表 可以为多维数组缩放相同

我有一个NumPy数组,形状如下:

(1532, 2036, 5)
(1532, 2036)
我想生成一个数组列表,其中每个数组都具有以下形状:

(1532, 2036, 5)
(1532, 2036)

可以使用以下命令对三维阵列进行切片:

[x[:,:,i] for i in range(5)]
上面将为您提供一个二维阵列列表


对于多维阵列,可以缩放相同的过程

您可以使用

[x[:,:,i] for i in range(5)]
上面将为您提供一个二维阵列列表

可以为多维数组缩放相同的过程

您可以用来表示直到最后一个维度的所有维度。例如:

arr = np.random.rand(4, 3, 2)
arr
array([[[ 0.35235813,  0.57984153],
        [ 0.53743048,  0.46753367],
        [ 0.80048303,  0.07982378]],

       [[ 0.1339381 ,  0.84586721],
        [ 0.81425027,  0.41086151],
        [ 0.34039991,  0.19972737]],

       [[ 0.2112466 ,  0.73086434],
        [ 0.03755819,  0.40113463],
        [ 0.74622891,  0.74695994]],

       [[ 0.99313615,  0.65634951],
        [ 0.90787642,  0.37387861],
        [ 0.8738962 ,  0.41747727]]])
最后一个维度数组的列表可以构造为@Usernamenotfound,也可以使用
省略号来构造,如下所示:

[arr[..., i] for i in range(arr.shape[-1])]
[array([[ 0.35235813,  0.53743048,  0.80048303],
        [ 0.1339381 ,  0.81425027,  0.34039991],
        [ 0.2112466 ,  0.03755819,  0.74622891],
        [ 0.99313615,  0.90787642,  0.8738962 ]]),
 array([[ 0.57984153,  0.46753367,  0.07982378],
        [ 0.84586721,  0.41086151,  0.19972737],
        [ 0.73086434,  0.40113463,  0.74695994],
        [ 0.65634951,  0.37387861,  0.41747727]])]
每个元素都具有形状
(4,3)

同样,您也可以对第一维度使用相同的方法,生成4(3,2)个数组

您可以使用来表示直到最后一个维度的所有维度。例如:

arr = np.random.rand(4, 3, 2)
arr
array([[[ 0.35235813,  0.57984153],
        [ 0.53743048,  0.46753367],
        [ 0.80048303,  0.07982378]],

       [[ 0.1339381 ,  0.84586721],
        [ 0.81425027,  0.41086151],
        [ 0.34039991,  0.19972737]],

       [[ 0.2112466 ,  0.73086434],
        [ 0.03755819,  0.40113463],
        [ 0.74622891,  0.74695994]],

       [[ 0.99313615,  0.65634951],
        [ 0.90787642,  0.37387861],
        [ 0.8738962 ,  0.41747727]]])
最后一个维度数组的列表可以构造为@Usernamenotfound,也可以使用
省略号来构造,如下所示:

[arr[..., i] for i in range(arr.shape[-1])]
[array([[ 0.35235813,  0.53743048,  0.80048303],
        [ 0.1339381 ,  0.81425027,  0.34039991],
        [ 0.2112466 ,  0.03755819,  0.74622891],
        [ 0.99313615,  0.90787642,  0.8738962 ]]),
 array([[ 0.57984153,  0.46753367,  0.07982378],
        [ 0.84586721,  0.41086151,  0.19972737],
        [ 0.73086434,  0.40113463,  0.74695994],
        [ 0.65634951,  0.37387861,  0.41747727]])]
每个元素都具有形状
(4,3)

同样,您也可以对第一维度使用相同的方法,生成4(3,2)个数组


您还可以使用排列轴,然后简单地遍历数组:

import numpy as np
a = ... # Define the input array here
out = [a for a in np.transpose(arr, (2, 0, 1))]

您还可以使用排列轴,然后简单地遍历数组:

import numpy as np
a = ... # Define the input array here
out = [a for a in np.transpose(arr, (2, 0, 1))]

我想那应该是2D阵列。简单地使用列表理解-
[a[:,:,i]表示范围内的i(a.shape[-1])]
?类似的问题(但要解包为变量):。我提出了这个列表理解,被接受的答案转换了轴。我认为是2D数组。简单地使用列表理解-
[a[:,:,i]表示范围内的i(a.shape[-1])]
?类似的问题(但要解包为变量):。我提出了这个列表理解,被接受的答案转换了轴。您可能希望通过检查三维中的切片数,或
范围内的I(x.shape[2]),使循环适应数组中的切片数
。您可能希望通过检查第三维中的切片数,使循环适应阵列中的切片数,或检查范围内的i(x.shape[2])
。。。请问你为什么投了反对票?将帮助我,使我可以改善这一职位,如果需要的话。向下的投票人。。。请问你为什么投了反对票?将帮助我,使我可以改善这个职位,如果需要的话。