Собственный c сопоставляет две матрицы с новой по четным и нечетным строкам без копирования

#c #matrix #eigen

Вопрос:

Я использую Eigen, и у меня есть две матрицы A(a,b) и B(c,d), которые я хотел бы составить в новую C(a c, b=d), имея нечетные строки из A и четные строки из B.

Теперь a и c-это строки, b и d-столбцы, и я хотел бы использовать карту, чтобы значения не копировались. Конечно, циклы не приветствуются, если только они не могут избежать копирования. 😉

Спасибо

ИЗМЕНИТЬ: Вариант использования: A и B-это разделенные вершинами и нормалями матрицы сетки,

 VectorXd A(a,b); -- vertices
VectorXd B(c,d); -- normals
 

в то время как C-это вершинный и нормальный одиночный объект в облаке точек.

 struct Point{
    VectorXd A; -- vertices
    VectorXd B; -- normals
}
 

Копирование здесь означает удвоение использования памяти

ПРАВКА: Забыл сказать, что b=d равно

Комментарии:

1. Похоже на проблему x-y. Чего вы пытаетесь этим добиться? Гораздо лучше выполнить одноразовую копию, чем многократное косвенное использование матрицы.

2. Мне любопытно, каков вариант использования для этого. Это то, что вы хотите C автоматически обновлять, когда A или B изменять? Если это связано с соображениями производительности, вы, вероятно, смотрите в неправильном направлении.

3. С существующей функциональностью вы, вероятно, могли бы сначала создать окончательную C матрицу и иметь A и B как карты внутри нее. Или создайте пользовательский NullaryExpr ( eigen.tuxfamily.org/dox-devel/TopicCustomizing_NullaryExpr.html — эта ссылка просто показывает смутное направление, а не решение вашей проблемы)