我对空间中的两个点有两个估计 - 每个都有一个 3D 位置和一个雪茄形 3x3 协方差矩阵,我正在检查这些观察实际上是指同一个点的假设。所以我想用这个假设来计算两个观察结果的一致性。
搜索将 Bhattacharyya 距离或 Kullback-Leibler 散度作为候选。我不是在寻找最正确的估计,而是一个易于实现的函数,它采用两个位置和两个 3x3 矩阵并返回标准偏差的百分比或距离。
以下是一些类似的主题:
我对空间中的两个点有两个估计 - 每个都有一个 3D 位置和一个雪茄形 3x3 协方差矩阵,我正在检查这些观察实际上是指同一个点的假设。所以我想用这个假设来计算两个观察结果的一致性。
搜索将 Bhattacharyya 距离或 Kullback-Leibler 散度作为候选。我不是在寻找最正确的估计,而是一个易于实现的函数,它采用两个位置和两个 3x3 矩阵并返回标准偏差的百分比或距离。
以下是一些类似的主题:
最后我去了巴塔查亚距离。我改编了这里引用的 R 代码:
// In the following, Vec3 and Mat3 are C++ Eigen types.
/// See: https://en.wikipedia.org/wiki/Mahalanobis_distance
double mahalanobis(const Vec3& dist, const Mat3& cov)
{
return (dist.transpose()*cov.inverse()*dist).eval()(0);
}
/// See: https://en.wikipedia.org/wiki/Bhattacharyya_distance
double bhattacharyya(const Vec3& dist, const Mat3& cov1, const Mat3& cov2)
{
const Mat3 cov = (cov1+cov2)/2;
const double d1 = mahalanobis(dist, cov)/8;
const double d2 = log(cov.determinant()/sqrt(cov1.determinant()*cov2.determinant()))/2;
return d1+d2;
}