特征:对不同类型的向量进行操作
Eigen: Operating on Vectors of Different Types
我有很多表情像
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 对上述表达式进行矢量化?
您需要将第二个矩阵转换为第一个矩阵的形式,如下所示:
Eigen::Matrix< float, 3, 1 > mf;
Eigen::Matrix< unsigned int, 3, 1 > mi;
mf.dot(mi.cast<float>());
此外,Eigen 为向量提供了现成的类型,例如 Eigen::Vector3f
用于浮点数,Eigen::Vector3i
用于整数。 (但是 none 对于 unsigned int
)
我有很多表情像
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 对上述表达式进行矢量化?
您需要将第二个矩阵转换为第一个矩阵的形式,如下所示:
Eigen::Matrix< float, 3, 1 > mf;
Eigen::Matrix< unsigned int, 3, 1 > mi;
mf.dot(mi.cast<float>());
此外,Eigen 为向量提供了现成的类型,例如 Eigen::Vector3f
用于浮点数,Eigen::Vector3i
用于整数。 (但是 none 对于 unsigned int
)