объем памяти массивов больше ожидаемого - PullRequest
0 голосов
/ 13 июня 2018

У меня есть файл bad_orders.csv размером приблизительно 16 ГБ, который нужно прочитать в массив с массой памяти 58 ГБ.

ubuntu@ip-172-31-22-232:~/Data/Autoencoder_Signin/joined_signin_rel$ free -g
          total        used        free      shared  buff/cache   available
Mem:             58           0          58           0           0          58
Swap:             0           0           0

Когда я запускаю следующую команду, задание неоднократно прерывалось:

import numpy as np
arr = np.genfromtxt('bad_orders.csv', delimiter =',', missing_values='',dtype='float32')

Терминал показывает, что использует непропорциональную память:

ubuntu@ip-172-31-22-232:~$ free -g
          total        used        free      shared  buff/cache   available
Mem:             58          42          12           0           3          16
Swap:             0           0           0

Затем я попытался сэмплировать 10000 строк из исходного файла и проверить использование памяти:

In [7]: samples = np.genfromtxt('samples.csv',delimiter=',', 
missing_values='', dtype='float32')

In [8]: samples.nbytes
Out[8]: 16680000

Образец массива NumPy показывает размер 0,017 ГБ.Всего мой файл содержит ~ 8M строк, поэтому, если использование памяти масштабируется линейно, большой массив numpy должен занимать 13 ГБ памяти.Почему на чтение всего файла уходит более 50 ГБ?

1 Ответ

0 голосов
/ 13 июня 2018

genfromtxt имеет много проверок типов и предназначен только для небольших файлов.Для больших файлов вам лучше использовать loadtxt, хотя по-прежнему используется гораздо больше памяти, чем у файла, как упомянуто здесь .Еще один лучший способ - использовать панд read_csv.

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