матрица — ошибка сегментации C ++ броненосца princomp ()

Я бегу код, как показано ниже:

#define ARMA_64BIT_WORD
#include <iostream>
#include </usr/include/armadillo>
using namespace arma;
typedef Mat<float> fmat;
typedef Col<float> fvec;

int main (int argc, char** argv)
{

fmat A;
A.load("matrix.txt");
fmat coeff;
fmat score;
fvec latent;
fvec tsquared;

princomp(coeff, score, latent, tsquared, A);
return 0;
}

с matrix.txt, содержащим матрицу размером 2 на 46341 (2 строки, 46341 столбец).
это работает хорошо, но когда я увеличиваю матрицу до 2 на 46342 (2 строки, 46342 столбца),
произошла ошибка сегментации (ядро сброшено).

Есть ли ограничение или ограничение на количество столбцов?
Или я что-то не так пишу?

Я работаю в Ubuntu 12.04.4 LTS (GNU / Linux 3.2.0-40-virtual x86_64), Menmory: 16 ГБ

Спасибо вам!

1

Решение

princomp () вычислит ковариационную матрицу (X ‘* X), ​​которая в вашем случае имеет размер 46342×43642. Это имеет размер 16.001 ГБ, и у вас есть только 16 ГБ. Отсюда и провал.

Если вы компилируете с символами отладки (или без -DNDEBUG или подобного), тогда должен быть показан фактический сбой выделения памяти.

Я не могу рекомендовать другое решение, так как я не знаю, какую проблему вы пытаетесь решить.

2

Другие решения


По вопросам рекламы [email protected]