Я бегу код, как показано ниже:
#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 ГБ
Спасибо вам!
princomp () вычислит ковариационную матрицу (X ‘* X), которая в вашем случае имеет размер 46342×43642. Это имеет размер 16.001 ГБ, и у вас есть только 16 ГБ. Отсюда и провал.
Если вы компилируете с символами отладки (или без -DNDEBUG или подобного), тогда должен быть показан фактический сбой выделения памяти.
Я не могу рекомендовать другое решение, так как я не знаю, какую проблему вы пытаетесь решить.