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

ОБНОВЛЕННЫЙ вопрос:

У меня матрица 120000x14000, которая разрежена.Затем я хочу сделать некоторую матричную алгебру:

c = np.sum(indM, axis=1).T
w = np.diag(1 / np.array(c)[0]) # Fails with memory error
w = sparse.eye(len(indM), dtype=np.float)/np.array(c)[0] # Fails with memory error
w = np.nan_to_num(w)
u = w @ indM # Fails with 'Object types not supported'
u_avg = np.array(np.sum(u, axis=0) / np.sum(indM, axis=0))[0]

Таким образом, проблема в том, что вышеупомянутое вначале терпит неудачу с ошибкой памяти при создании диагональной матрицы с нецелыми в диагонали.Если мне удастся продолжить, ядро ​​каким-то образом не распознает «Объекты» как поддерживаемые типы, что означает, что я не могу делать разреженные матрицы, я думаю?

Что вы рекомендуете делать?

Ответы [ 3 ]

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

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

  1. Измените ваш фрейм данных на пустой массив (это может уменьшить накладные расходы памяти)

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

  3. За счет точности вы можете изменить dtype любогоплавает от float64 (по умолчанию) до float32.

  4. Если вы загружаете данные из файла .csv, pd.read_csv имеет параметр chunksize, который позволяет вамчитать ваши данные кусками.

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

Попробуйте использовать облачный ресурс, такой как Kaggle.Там может быть больше вычислительной мощности, чем на вашем компьютере.

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

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

import numpy as np
c = np.sum(indM,axis=1)
...