特征:在不同类型的向量上运算

时间:2015-03-10 11:22:28

标签: c++ vectorization eigen

我有许多表达式看起来像

auto result = vec3f.cwiseProduct( vec3ui );

其中vec3f来自Eigen::Matrix< float, 3, 1 >vec3ui来自Eigen::Matrix< unsigned int, 3, 1 >。 这些似乎不被允许,至少编译器抱怨它。

因此我需要写上面的内容,如

Eigen::Matrix< float, 3, 1 > result( vec3f.x() * vec3ui.x(), /*...*/ );

导致代码非常长,不太可读。

是否可以使用Eigen 3?

对上述表达式进行矢量化

1 个答案:

答案 0 :(得分:0)

您需要将第二个矩阵转换为第一个矩阵的形式,如下所示:

Eigen::Matrix< float, 3, 1 > mf;
Eigen::Matrix< unsigned int, 3, 1 > mi;
mf.dot(mi.cast<float>());

此外,Eigen为矢量提供了准备使用的类型,例如Eigen::Vector3f用于浮点数,Eigen::Vector3i用于int。 (但unsigned int没有)