Невозможно раскрыть массив NumPy - PullRequest
0 голосов
/ 22 сентября 2019

У меня есть массив, содержащий информацию об изображениях.Он содержит информацию о 21495 изображениях в массиве с именем 'shuffled'.

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 голосов
/ 22 сентября 2019

Попробуйте

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 канала, это не сработает.

0 голосов
/ 22 сентября 2019

Есть два способа, о которых я могу подумать:

Один использует vstack() функцию numpy, но она становится довольно медленной со временем, когда размер массива начинает увеличиваться.

Другой способ (который я использую) состоит в том, чтобы взять пустой список и продолжать добавлять массив изображений в этот список, используя .append(), а затем, наконец, преобразовать этот список в массив numpy.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...