Инициализирующая матрица векторов C ++ с собственным - PullRequest
0 голосов
/ 07 ноября 2018

Моя конечная цель - создать матрицу, в которой каждый элемент является вектором, используя собственный модуль с c ++, чтобы я мог выполнить суммирование матриц. Тип данных, который я придумал:

Matrix<Vector3d,256,256> Matrix_A;

для матрицы 256x256, где каждый элемент имеет тип данных Vector3D. Это не работает .. Это вообще возможно?

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Если вы прочитаете сообщение об ошибке вашего компилятора, вы найдете что-то вроде:

error: static_assert failed "OBJECT_ALLOCATED_ON_STACK_IS_TOO_BIG"

Это означает, что для таких больших объектов вы должны перейти к динамически распределенному типу матрицы:

int N = 256;
using Mat = Matrix<Vector3d,Dynamic,Dynamic>;
Mat A(N,N), B(N,N);
Mat C = A+B;
0 голосов
/ 08 ноября 2018

Eigen's Matrix template принимает только скалярный тип для первого параметра шаблона (в то время как документ намекает на возможность расширения поддерживаемых типов, не ясно, как):

Три обязательных параметра шаблона Matrix:

Matrix<typename Scalar, int RowsAtCompileTime, int ColsAtCompileTime>

Скаляр - это скалярный тип, то есть тип коэффициентов. То есть, если вам нужна матрица с плавающей точкой, выберите здесь float. См. Скалярные типы для получения списка всех поддерживаемых скалярных типов и того, как расширить поддержку для новых типов.

Это означает, что невозможно определить матрицу векторов. Единственная возможность, которую я вижу, - это использование std::vector объектов Eigen's Matrix:

typedef Matrix<float,256,256> my_2dfmat;

std::vector<my_2dfmat> Matrix_A(3);

У этого есть некоторые недостатки, например, порядок индексации не интуитивен и т. Д.

...