(Python) проблема преобразования numpy genfromtxt - PullRequest
0 голосов
/ 05 ноября 2018

я использую

netdata = num.genfromtxt('resultscut.rw', dtype=None, delimiter = '|', usecols=(0,1,2,3,4))

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

  File "/home/.local/lib/python2.7/site-packages/numpy/lib/npyio.py", line 2047, in genfromtxt
    for (i, conv) in enumerate(converters)]))
MemoryError

Это слишком большой для genfromtxt? Как я могу это исправить?

Заранее спасибо, Привет:)

1 Ответ

0 голосов
/ 05 ноября 2018

Как обсуждалось в комментариях, результирующий объект, вероятно, слишком велик для вашей памяти.

Numpy имеет возможность хранить массивы на вашем диске (надеюсь, SSD, если вы используете жесткий диск, это, вероятно, будет слишком медленным). Это называется memmap .

Можно сохранить типы данных, такие как строки, в memmap, но это может стать сложным: numpy.memmap для массива строк?

Кроме того, в первую очередь может быть сложно получить данные в memmap. Вы можете разделить файл и загрузить его за несколько шагов Затем вы можете записать отдельные части в карту памяти одну за другой.

Другим важным моментом может быть dtype. Вы указываете None и используете много столбцов. У вас есть разные типы данных в разных столбцах? Если да, вы можете переключиться на панд вместо numpy. Это даст вам правильный тип данных для этой таблицы, например, данные. Обязательно используйте соответствующие типы данных для каждого столбца. Это может значительно уменьшить объем используемой памяти (и может решить вашу проблему): https://www.dataquest.io/blog/pandas-big-data/

Чтобы проверить объем памяти массива, вы можете использовать nbytes:

np.ones((10,10), dtype="float64").nbytes # 800
np.ones((10,10), dtype="int32").nbytes # 400
...