c++ - 特征:vector3ds之间的快速平均角度
问题描述
我正在使用 Eigen 库来计算 Vector3ds 的两个向量之间的平均角度。必须有比“手动”尝试每种组合更快的方法吗?
double average_angle(const std::vector<Eigen::Vector3d>& v1, const std::vector<Eigen::Vector3d>& v2)
{
double result = 0;
for (const auto& v1_entry : v1)
{
for (const auto& v2_entry : v2)
{
result += acos(v1_entry.dot(v2_entry));
}
}
const auto item_count = v1.size() * v2.size();
return result / item_count;
}
解决方案
更优雅的版本是:
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();
但不要指望它会更快,因为这将归结为相同的代码。
推荐阅读
- sql-server - 如何根据多行的各种条目 ID 的条目日期从数据库中获取最新数据
- vue.js - 如何获得焦点以返回选择输入
- pandas - 将 KDB 查询返回到 pandas 数据框
- python - 我们如何定义 Keras 的 Early Stopping 以在每批(而不是整个 epoch)之后检查
- swift - 有没有办法在 UIPickerView 上从 Firebase 实时数据库打印数据?
- cidr - CIDR 和 IP 地址数
- c# - 如何建立匿名参数数组
- excel - 无法使用 vba 在散点图上绘制值
- ios - 如何强制 iOS 12 的主屏幕 Web 应用程序自动更新?
- javascript - 当焦点在输入字段中时,为什么日期选择器在 React 中闪烁?