2017-02-10 2 views
0

Я хочу преобразовать простой 2D-массив в SparseMatrix, чтобы улучшить производительность и время выполнения, поскольку я имею дело с массивом размером около 50 000-70 000.Как преобразовать большой 2D-массив в разреженную матрицу с использованием библиотеки Eigen?

До сих пор, что у меня есть:

SparseMatrix<double> sp; 
sp.resize(numCells,numCells); 
double Matrix[numCells,numCells]; 
Matrix = Map<SparseMatrix>(Matrix,numCells,numCells); 

Компилятор типа возвращает значение рассогласования в аргументе 1 в списке параметров шаблона для «шаблонного класса Эйген :: Карты». Я понимаю, что здесь что-то не хватает, но я не могу понять.

+0

в том, что синтаксис C++? 'double Matrix [numCells, numCells];'. Я не помню, чтобы было возможность указать N-мерные массивы таким образом – smac89

+0

Нет, что не является синтаксисом C++. Я должен был быть синтаксически правильным. Извиняюсь. –

ответ

1

Сделать плотную матрицу и превратить ее в разреженную матрицу:

double matrix[numCells * numCells]; // 1d array representation of your matrix 
SparseMatrix<double> sp = Map<MatrixXd>(matrix,numCells,numCells).sparseView(); 
+0

Спасибо, это решило проблему. –

Смежные вопросы