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

时间:2017-04-04 20:58:13

标签: python numpy

我目前正在寻找可以将ndarray拆分为更小的ndarray的方法。

示例:给定具有形状的ndarray(78,1440,3),我想从中提取大小(78,72,3)的较小ndarray的列表,这将是20个较小的子数组。

我尝试使用numpy.split(matrix,72,axis=1)

flexbox

生成长度为72的列表 并且第一个条目具有形状(78,20,3)..

为什么我无法提取我需要的尺寸?

2 个答案:

答案 0 :(得分:1)

split中的72是要分割成的元素数量,而不是分割尺寸的尺寸(根据轴)。

但您可以使用:

numpy.split(matrix,matrix.shape[1]//72,axis=1)

将其拆分为20个长度为72的元素(针对您的情况)。请注意,您必须确保 shape[1]可以被72 分割,否则将会引发ValueError

答案 1 :(得分:0)

方法#1:您可以使用np.hsplit完全为此任务制作 -

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:此任务的另一个工具是np.array_split -

np.array_split(arr,20,axis=1)
相关问题