首页 > 解决方案 > 如何将两个 Eigen::Vector3f 除以相应的元素

问题描述

我需要将两个向量除以相应的元素。我怎样才能做到这一点?我找不到任何好的来源。就像是

Eigen::Vector3f v1 = { 10.0f, 10.0f, 10.0f };
Eigen::Vector3f v2 = { 5.0f, 2.0f, 2.0f };
Eigen::Vector3f v3 = v1 / v2;

预期结果:

{ 2.0f, 5.0f, 5.0f }

它说“没有运算符/与操作数匹配”进行除法。

标签: c++eigen

解决方案


虽然内置矩阵(表达式)类型通过重载运算符(例如矩阵向量乘法)支持常见的线性代数运算,但 Eigen 为组件运算提供了不同的类型;它们被称为“数组”并包含Eigen::Array<...>实例化以及数组表达式。.array()您始终可以通过and成员函数将矩阵包装到数组表达式中,反之亦然.matrix()- 它们不复制任何内容,而是重新打包基础数据,以便可以将数组相关的操作用于矩阵,或矩阵相关的操作用于数组。在你的情况下,这将是

const Eigen::Vector3f v1 = { 10.0f, 10.0f, 10.0f };
const Eigen::Vector3f v2 = { 5.0f, 2.0f, 2.0f };
const Eigen::Vector3f v3 = v1.array() / v2.array();

如果完全不需要矩阵接口,也可以Eigen::Array<...>直接使用:

const Eigen::Array3f a1 = { 10.0f, 10.0f, 10.0f };
const Eigen::Array3f a2 = { 5.0f, 2.0f, 2.0f };
const Eigen::Array3f a3 = a1 / a2;

推荐阅读