#include
#include
#include
#include
int main()
{
const int num_points = 300000000;
Eigen::Matrix init_points(num_points, 3);
Eigen::Matrix transformed_points(num_points, 3);
std::mt19937 rng(42);
std::uniform_real_distribution dist(-100.0f, 100.0f);
for (int i = 0; i < num_points; ++i)
{
init_points(i, 0) = dist(rng); // x
init_points(i, 1) = dist(rng); // y
init_points(i, 2) = dist(rng); // z
}
float theta = 3.14159265358 / 4; // pi/4
Eigen::Matrix3f rotation;
rotation = Eigen::AngleAxisf(theta, Eigen::Vector3f::UnitZ());
Eigen::Vector3f translation(10.0f, 20.0f, 30.0f);
auto start_time = std::chrono::high_resolution_clock::now();
//transformed_points = init_points * rotation; //uncomment this line to use the Matrix multiply version
//transformed_points.rowwise() += translation.transpose(); //uncomment this line to use the Matrix multiply version
for (int i = 0; i < num_points; ++i) //comment this for loop to use the Matrix multiply version
{
Eigen::Vector3f v = init_points.row(i).transpose();
v = rotation * v;
v += translation;
transformed_points.row(i) = v.transpose();
}
auto end_time = std::chrono::high_resolution_clock::now();
std::chrono::duration duration_ms = end_time - start_time;
std::cout
Подробнее здесь: https://stackoverflow.com/questions/792 ... -traversal
Умножение матрицы собственной ⇐ C++
Программы на C++. Форум разработчиков
1739464933
Anonymous
#include
#include
#include
#include
int main()
{
const int num_points = 300000000;
Eigen::Matrix init_points(num_points, 3);
Eigen::Matrix transformed_points(num_points, 3);
std::mt19937 rng(42);
std::uniform_real_distribution dist(-100.0f, 100.0f);
for (int i = 0; i < num_points; ++i)
{
init_points(i, 0) = dist(rng); // x
init_points(i, 1) = dist(rng); // y
init_points(i, 2) = dist(rng); // z
}
float theta = 3.14159265358 / 4; // pi/4
Eigen::Matrix3f rotation;
rotation = Eigen::AngleAxisf(theta, Eigen::Vector3f::UnitZ());
Eigen::Vector3f translation(10.0f, 20.0f, 30.0f);
auto start_time = std::chrono::high_resolution_clock::now();
//transformed_points = init_points * rotation; //uncomment this line to use the Matrix multiply version
//transformed_points.rowwise() += translation.transpose(); //uncomment this line to use the Matrix multiply version
for (int i = 0; i < num_points; ++i) //comment this for loop to use the Matrix multiply version
{
Eigen::Vector3f v = init_points.row(i).transpose();
v = rotation * v;
v += translation;
transformed_points.row(i) = v.transpose();
}
auto end_time = std::chrono::high_resolution_clock::now();
std::chrono::duration duration_ms = end_time - start_time;
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/79262191/eigen-matrix-multiplication-is-much-less-efficient-than-for-loop-traversal[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия