Преобразование списка в массив numpy без использования большого количества оперативной памяти

Я хотел бы преобразовать список с формой (1200, 140, 150, 130) в массив numpy, но стандарт numpydata = np.array(mylist) использует много памяти.

Есть ли какой-либо менее потребляющий память способ сделать это?

Всего 1 ответ


Если для окончательного результата есть память, но внутреннее устройство np.array использует слишком много памяти, вы можете обойти эту обработку списка блоками. Например:

In [236]: res = np.zeros((10,3,4),int)                                                         
In [237]: alist = np.random.randint(0,10,(10,3,4)).tolist()                                    
In [238]: for i,row in enumerate(alist): 
     ...:     res[i] = row 
In [240]: np.allclose(res, np.array(alist))                                                    
Out[240]: True

Для маленьких массивов эта итерация будет медленнее, но с большими, проблемы управления памятью могут перевесить затраты на итерацию.


Есть идеи?

10000