Ошибка памяти при работе с большим набором данных - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть интерполированные данные из 3-х числовых массивов.

Each of Length - 107952899

Решение проблем

Когда я объединяю эти три числовых массива как панды df, я получаю MemoryError.

Причина преобразования в df

Мне нужно сделать некоторые расчеты, панды делают это проще, поэтому я предпочел делать с пандами.Я считаю, что объем памяти трех массивов numpy пересекает 3 ГБ и более.

Сведения о системе:

8 ГБ ОЗУ Python 3.6.3

Требование

Iпонять причину такой ошибки, но есть ли возможность избежать MemoryError или какой-либо другой оптимальной практики, которой следует следовать ??

1 Ответ

0 голосов
/ 07 февраля 2019

Когда я объединяю эти три массива в виде панд df, я получаю MemoryError.

Допустим, вы делаете:

import numpy as np
import pandas as pd

big_array_1 = np.array(np.random.random(10**7))
big_array_2 = np.array(np.random.random(10**7))
big_array_3 = np.array(np.random.random(10**7))

На моем компьютере,это занимает около 300 МБ памяти.

Тогда, если я сделаю:

df = pd.DataFrame([big_array_1,big_array_2, big_array_3])

Память взлетает до 9 Гб оперативной памяти.Если вы умножите его в 10 раз (чтобы получить ваши 3 Гб данных вместо моих 300), вы увеличите до 90 Гб, что, вероятно, больше, чем ваш своп с Ram +, что повысит MemoryError.

Но если вместо этого вы сделаете:

df = pd.DataFrame({"A":big_array_1, "B": big_array_2, "C":big_array_3})

, тогда ваше использование памяти не будет значительно больше, чем у одного из ваших трех массивов.

Я подозреваю, что это ваша проблема ...

...