ошибка значения: невозможно преобразовать входной массив из фигуры (29097,280,212,3) в фигуру (280,212,3) - PullRequest
0 голосов
/ 13 марта 2020

У меня 5 массивов numpy большого размера, я хочу объединить их в один numpy массив. Использование np.concatenate не помогает, потому что MemoryError: Невозможно выделить ... поэтому я решил использовать np.memmap. Форма моих массивов выглядит следующим образом:

#print(arrayA.shape) (29097, 280, 212, 3)
#print(arrayB.shape) (16058, 280, 212, 3)
#print(arrayC.shape) (15412, 280, 212, 3)
#print(arrayD.shape) (21634, 280, 212, 3)
#print(arrayF.shape) (9477 , 280, 212, 3)

мой код:

    import glob
    import numpy as np
    npfiles= glob.glob("D:/mycode/*.npy")
    npfiles.sort()
    #print(npfiles)
    # create a memory-mapped array 
    pred = np.memmap('memm4', dtype='uint8', mode='w+', shape=(91678,280,212,3))
    print(pred.shape)

    for i,npfile in enumerate(npfiles):
         pred[i,:,:,:]=np.load(npfile)
    np.save('D:/mycode/pred.npy',pred)

, но это показывает, что эта проблема "не может транслировать входной массив из формы (29097,280,212,3 ) в форму (280,212,3) кто-нибудь может мне помочь и спасибо

1 Ответ

1 голос
/ 13 марта 2020

В настоящее время вы помещаете 3-мерный тензор в 4-мерное 1, переменная i содержит индекс файла от 0 4. Следовательно, pred[i,:,:,:] имеет только три измерения, но вам нужно указать, куда собирается массив храниться в памяти.

last_index = 0
for npfile in npfiles:
    temporary_array = np.load(npfile)
    pred[last_index:last_index+ len(temporary_array),:,:,:] = temporary_array
    last_index += len(temporary_array)

Вы также можете попробовать что-то вроде hdf5 /, которое позволит вам легко хранить большие массивы.

...