C++ 特征:矢量之间的快速平均角度

C++ 特征:矢量之间的快速平均角度,c++,geometry,eigen,angle,eigen3,C++,Geometry,Eigen,Angle,Eigen3,我正在使用特征库来计算两个矢量之间的平均角度。必须有比“手工”尝试每种组合更快的方法吗 双平均_角(常数std::vector&v1,常数std::vector&v2) { 双结果=0; 用于(常量自动和v1\u条目:v1) { 用于(常数自动和v2_条目:v2) { 结果+=acos(v1_条目.dot(v2_条目)); } } 常量自动项目计数=v1.size()*v2.size(); 返回结果/项目计数; } 更优雅的版本是: Matrix3Xd::Map M1(v1[0].data(),

我正在使用特征库来计算两个矢量之间的平均角度。必须有比“手工”尝试每种组合更快的方法吗

双平均_角(常数std::vector&v1,常数std::vector&v2)
{
双结果=0;
用于(常量自动和v1\u条目:v1)
{
用于(常数自动和v2_条目:v2)
{
结果+=acos(v1_条目.dot(v2_条目));
}
}
常量自动项目计数=v1.size()*v2.size();
返回结果/项目计数;
}

更优雅的版本是:

Matrix3Xd::Map M1(v1[0].data(), 3, v1.size();
Matrix3Xd::Map M2(v2[0].data(), 3, v2.size();
return (M1.transpose() * M2).diagonal().array().acos().mean();

但不要期望它更快,因为这可以归结为相同的代码。

更优雅的版本是:

Matrix3Xd::Map M1(v1[0].data(), 3, v1.size();
Matrix3Xd::Map M2(v2[0].data(), 3, v2.size();
return (M1.transpose() * M2).diagonal().array().acos().mean();

但不要期望它更快,因为这将归结为相同的代码。

您想解决什么问题?对于
v1
中的所有向量都是“相似”的,而
v2
中的所有向量都是相同的情况,也许平均向量之间的角度对你有用。不幸的是,它们可能非常不同,因此无法可靠地工作。我还尝试将所有点积平均在一起,并取其ACO。但这似乎不起作用。结果在很大程度上取决于给定的向量。在一些奇怪的情况下,你会得到荒谬的结果。这就是为什么我认为你应该告诉我们你的“真正”问题。你想解决什么?对于
v1
中的所有向量都是“相似”的,而
v2
中的所有向量都是相同的情况,也许平均向量之间的角度对你有用。不幸的是,它们可能非常不同,因此无法可靠地工作。我还尝试将所有点积平均在一起,并取其ACO。但这似乎不起作用。结果在很大程度上取决于给定的向量。在一些奇怪的情况下,你会得到荒谬的结果。这就是为什么我认为你应该告诉我们你的“真正”问题。