Как создать эффективную 3D-матрицу, используя собственную библиотеку в C ?

#c #eigen #robotics

#c #eigen #робототехника

Вопрос:

Для проекта по робототехнике мне нужна 3D-матрица заранее определенного размера. Используя собственную библиотеку, я не вижу, как: 1.) чтобы создать большую предопределенную матрицу, похоже, мне нужно использовать MatrixXd, но это для динамической матрицы. 2.) создайте 3D-матрицу, т.е. size = (int от 200 до 1000) и matrix (size, size, size)

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

1. Существует неподдерживаемый класс tensor, смотрите здесь .

2. Также обратите внимание, что в стеке выделяется матрица заранее определенного размера Matrix , тогда как динамическая MatrixXd выделяется в куче.

Ответ №1:

  1. Не рекомендуется создавать большую матрицу с использованием статического выделения, поскольку это приведет к снижению производительности.
  2. Вместо 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-результата.