MemoryError при генерации numpy.MultivariateNormal - PullRequest
0 голосов
/ 18 мая 2018

У меня есть набор данных с 707 столбцами и 3947 строками.Исходя из этого, я вычисляю ковариационную матрицу 707x707, а массив или строка означает использование numpy.cov и pandas.df.mean соответственно.

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

Как я могу сгенерировать случайный набор данных такого большого размерас этими спецификациями без получения этой ошибки?

Редактировать:

Вот мой след стека:

Traceback (most recent call last):

  File "<ipython-input-28-701051dd6b16>", line 1, in <module>
    runfile('/project/home17/whb17/Documents/project2/scripts/mltest/covex.py', wdir='/project/home17/whb17/Documents/project2/scripts/mltest')

  File "/project/soft/linux64/anaconda/Anaconda3-5.0.1-Linux-x86_64/lib/python3.6/site-packages/spyder/utils/site/sitecustomize.py", line 705, in runfile
    execfile(filename, namespace)

  File "/project/soft/linux64/anaconda/Anaconda3-5.0.1-Linux-x86_64/lib/python3.6/site-packages/spyder/utils/site/sitecustomize.py", line 102, in execfile
    exec(compile(f.read(), filename, 'exec'), namespace)

  File "/project/home17/whb17/Documents/project2/scripts/mltest/covex.py", line 36, in <module>
    d2_x, d2_y = multivariate_normal(means, X_cov, [n_cols, n_rows], check_valid='ignore').T

  File "mtrand.pyx", line 4538, in mtrand.RandomState.multivariate_normal

MemoryError

Редактировать 2:

А вот код, которыйвызывает это:

X = pd.read_csv('../../data/mesa/MESA.csv', sep=',', header=None, index_col=0)

n_cols, n_rows = X.shape

means = X.mean(axis=0).tolist()

X_cov = np.cov(X.T)

d2_x, d2_y = multivariate_normal(means, X_cov, [n_cols, n_rows]).T

1 Ответ

0 голосов
/ 18 мая 2018

Судя по вашему коду, очень вероятно, что вы неверно истолковали использование multivariate_normal в

d2_x, d2_y = multivariate_normal(means, X_cov, [n_cols, n_rows]).T

Первый и второй параметры здесь - это среднее значение и ковариация.Третий параметр - это форма матрицы , каждая ячейка которой должна быть экземпляром случайной матрицы.Это не то, что транспонирует в пару, и почти наверняка не то, что вы хотите.

Например, если размеры X_cov равны 707 х 707, то размер результата равен 707 х 707 х 707 х n_rows.

Для создания игрушкинабор данных, вы должны использовать

multivariate_normal(means, X_cov, n_rows)

Общий результат, по сравнению с вашим первоначальным вопросом (до первого редактирования), должен быть меньше примерно на 1 / 1250000.

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