Преобразование в матрицы симметрии c с использованием Eigen3 без копирования данных - PullRequest
0 голосов
/ 12 июля 2020

Ранее я задавал аналогичный вопрос, но, к сожалению, не получил ответа.

У меня есть данные, которые хранятся в Eigen::MatrixXd:

Eigen::MatrixXd hugeMatrix(n*n,c),

где n*n большой, а c (относительно) маленький, и каждый столбец состоит из данных, соответствующих симметричной c матрице.

В al oop по столбцам я хочу выполнить умножение матрицы на матрицу, используя maps

for(unsigned i = 0; i < hugeMat.cols(); ++i){
  tmp += Eigen::Map<Eigen::MatrixXd>(hugeMat.data()+i*n*n,n,n) * ...
}

Поскольку матрицы являются симметричными c, это избыточно, поэтому я хотел бы сохранить только одну тройную angular часть матриц в каждом столбце, уменьшив количество их строк с От n*n до n*(n+1)/2.

Основная проблема здесь в том, что я не могу позволить себе хранить всю матрицу (что упростило бы отображение), ни копировать нижнюю часть в верхнюю часть angular для каждой матрицы. Есть ли объект типа Eigen, который я могу сопоставить, для которого требуется только нижняя (или верхняя) часть tri angular?

...