Python 将ndarray拆分为存储在列表中的较小ndarray

Python 将ndarray拆分为存储在列表中的较小ndarray,python,numpy,Python,Numpy,我目前正在寻找一种方法,在这种方法中,我可以将一个ndarray拆分为更小的ndarray 示例:给定形状为781440,3的ndarray,我想从中提取大小为78,72,3的较小ndarray列表,这将是20个较小的子ndarray 我试着用numpy.split 这将生成长度为72的列表 第一个条目的形状是78,20,3 为什么我无法提取所需的大小 拆分中的72是要拆分的元素数,而不是根据轴拆分的尺寸大小 但是,您可以使用: numpy.split(matrix,matrix.shape[1

我目前正在寻找一种方法,在这种方法中,我可以将一个ndarray拆分为更小的ndarray

示例:给定形状为781440,3的ndarray,我想从中提取大小为78,72,3的较小ndarray列表,这将是20个较小的子ndarray

我试着用numpy.split

这将生成长度为72的列表 第一个条目的形状是78,20,3

为什么我无法提取所需的大小

拆分中的72是要拆分的元素数,而不是根据轴拆分的尺寸大小

但是,您可以使用:

numpy.split(matrix,matrix.shape[1]//72,axis=1)
对于给定的案例,将其拆分为20个长度为72的元素。请注意,您必须确保形状[1]可除以72,否则将引发ValueError。

方法1:您可以使用made来完成此任务-

np.hsplit(arr,20) # creates list of 20 arrays 
样本运行-

1输入阵列:

In [52]: a = np.random.randint(0,9,(2,6,3))

In [53]: a
Out[53]: 
array([[[7, 8, 8],
        [7, 7, 1],
        [1, 6, 4],
        [6, 3, 8],
        [4, 7, 4],
        [0, 6, 3]],

       [[0, 8, 5],
        [2, 2, 8],
        [6, 0, 7],
        [5, 4, 6],
        [4, 3, 1],
        [8, 6, 6]]])
2将轴=1分割为3个部分,因此每个部分/子阵列的长度为2,2,3。因此,我们将得到这3个阵列的列表:

In [54]: b = np.hsplit(a,3)
3.手动验证这些部件:

In [55]: b[0]
Out[55]: 
array([[[7, 8, 8],
        [7, 7, 1]],

       [[0, 8, 5],
        [2, 2, 8]]])

In [56]: b[1]
Out[56]: 
array([[[1, 6, 4],
        [6, 3, 8]],

       [[6, 0, 7],
        [5, 4, 6]]])

In [57]: b[2]
Out[57]: 
array([[[4, 7, 4],
        [0, 6, 3]],

       [[4, 3, 1],
        [8, 6, 6]]])
方法2:这项任务的另一个工具是-

在列表或数组中?因为72是将其拆分为的元素数。
In [55]: b[0]
Out[55]: 
array([[[7, 8, 8],
        [7, 7, 1]],

       [[0, 8, 5],
        [2, 2, 8]]])

In [56]: b[1]
Out[56]: 
array([[[1, 6, 4],
        [6, 3, 8]],

       [[6, 0, 7],
        [5, 4, 6]]])

In [57]: b[2]
Out[57]: 
array([[[4, 7, 4],
        [0, 6, 3]],

       [[4, 3, 1],
        [8, 6, 6]]])
np.array_split(arr,20,axis=1)