(короткое) целое число занимает два байта для хранения. Вы хотите 25 000 списков, каждый с 2000 целыми числами; что дает
25000*2000*2/1000000 = 100 MB
Это прекрасно работает на моем компьютере (4 ГБ ОЗУ):
>>> import numpy as np
>>> x = np.zeros((25000,2000),dtype=int)
Можете ли вы создать приведенную выше матрицу нулей?
Вы читаете файл в список списков Python, а затем конвертируете его в массив numpy? Это плохая идея; это как минимум удвоит требования к памяти. Какой формат файла ваших данных?
Для разреженных матриц scipy.sparse
предоставляет различные альтернативные типы данных, которые будут гораздо более эффективными.
РЕДАКТИРОВАТЬ: ответ на комментарий ОП.
У меня есть 25000 экземпляров какого-то другого класса, каждый из которых возвращает список длиной около 2000. Я хочу поместить все эти списки, возвращенные в np.array
.
Ну, вы как-то превышаете 8 ГБ! Чтобы решить эту проблему, не делайте все эти манипуляции в памяти. Записывайте данные на диск класса за раз, затем удаляйте экземпляры и читайте в файле из numpy.
Сначала сделай
with open(..., "wb") as f:
f = csv.writer(f)
for instance in instances:
f.writerow(instance.data)
Это запишет все ваши данные в CSV-файл большого размера. Тогда вы можете просто использовать np.loadtxt
:
numpy.loadtxt(open(..., "rb"), delimiter=",")