无法扩展numpy数组

时间:2019-09-22 11:48:18

标签: python arrays numpy

我有一个包含有关图像信息的数组。它在名为“随机播放”的数组中包含有关21495张图像的信息。

np.shape(shuffled) = (21495, 1)
np.shape(shuffled[0]) = (1,)
np.shape(shuffled[0][0]) = (128, 128, 3) # (These are the image dimensions, with 3 channels of RGB)

如何将该数组转换为形状数组(21495、128、128、3)以馈入模型?

2 个答案:

答案 0 :(得分:0)

我可以想到2种方法:

一种方法是使用numpy的vstack()功能,但是当数组大小开始增加时,它的加班时间会变得很慢。

另一种方法(我使用的方法)是获取一个空列表,并继续使用.append()将images数组追加到该列表,然后最终将该列表转换为numpy数组。

答案 1 :(得分:0)

尝试

np.stack(shuffled[:,0])

stack(一种concatenate的形式)在新的初始维度上连接数组的列表(或数组)。我们需要先消除尺寸为1的尺寸。

In [23]: arr = np.empty((4,1),object)                                           
In [24]: for i in range(4): arr[i,0] = np.arange(i,i+6).reshape(2,3)            
In [25]: arr                                                                    
Out[25]: 
array([[array([[0, 1, 2],
       [3, 4, 5]])],
       [array([[1, 2, 3],
       [4, 5, 6]])],
       [array([[2, 3, 4],
       [5, 6, 7]])],
       [array([[3, 4, 5],
       [6, 7, 8]])]], dtype=object)
In [26]: arr.shape                                                              
Out[26]: (4, 1)
In [27]: arr[0,0].shape                                                         
Out[27]: (2, 3)
In [28]: np.stack(arr[:,0])                                                     
Out[28]: 
array([[[0, 1, 2],
        [3, 4, 5]],

       [[1, 2, 3],
        [4, 5, 6]],

       [[2, 3, 4],
        [5, 6, 7]],

       [[3, 4, 5],
        [6, 7, 8]]])
In [29]: _.shape                                                                
Out[29]: (4, 2, 3)

但是请注意,如果子阵列的形状不同,比如说一两个是黑白的,而不是3通道,那么这将不起作用。