#c #eigen #robotics
#c #eigen #робототехника
Вопрос:
Для проекта по робототехнике мне нужна 3D-матрица заранее определенного размера. Используя собственную библиотеку, я не вижу, как: 1.) чтобы создать большую предопределенную матрицу, похоже, мне нужно использовать MatrixXd, но это для динамической матрицы. 2.) создайте 3D-матрицу, т.е. size = (int от 200 до 1000) и matrix (size, size, size)
Комментарии:
1. Существует неподдерживаемый класс tensor, смотрите здесь .
2. Также обратите внимание, что в стеке выделяется матрица заранее определенного размера
Matrix
, тогда как динамическаяMatrixXd
выделяется в куче.
Ответ №1:
- Не рекомендуется создавать большую матрицу с использованием статического выделения, поскольку это приведет к снижению производительности.
-
Вместо 3D-матрицы вы можете создать вектор 2D-матриц.
например: Eigen::MatrixX<Собственный ::MatrixXf, РАЗМЕРНОСТЬ, 1> tmp;
Ответ №2:
Что ж, я нахожу способ построить 3D-матрицу в моем проекте. Используйте вектор:
typedef vector<Matrix<double, Dynamic, Dynamic>> M3;
Если вы хотите инициализировать заранее определенную матрицу с размерностью (k, m, n), просто используйте:
M3 W(k, M2(m, n));
Таким образом легко сохранить собственную матрицу. Но если вы хотите вычислить 3D-матрицу, вам следует разбить ее на множество 2d-матриц и использовать цикл для получения 3D-результата.