我想计算在 D 维空间(例如通过最小二乘法)中与给定的 N 条线集(例如由点和方向向量给出)具有最小欧几里得距离的点/向量
由于我在项目中使用Python,我想知道在像numpy这样的标准库中是否已经有针对这个普遍问题的适当实现,但我还没有找到。
已经有相关问题,例如:
Finding the centre of multiple lines using least squares approach in Python
nearest intersection point to many lines in python
但是,这些问题没有考虑大于 3 的维度,就我而言,我想将问题调整为 100 这样的维度。
我还找到了Matlab的这个资源,它似乎用得不多,但它处理同样的问题: https://de.mathworks.com/matlabcentral/fileexchange/59805-line-line-intersection-n-lines-d-space?s_tid=FX_rc1_behav
最佳答案
如果索引为 i 的每一行都由一个单位向量列给出
vi = {
v1i,
v2i,
v3i,
...
vDi
}
沿着线 i 指向,并由向量列给出一个点
pi = {
p1i,
p2i,
p3i,
...
pDi
}
,其中 i = 1...N,则您寻找的点 x
(以列形式给出)由等式给出
x = inverse( sum(i=1:N, I - vi * transposed(vi)) ) * sum(i=1:N, (I - vi * transposed(vi)) * pi);
这里I
是D维单位方阵。
如果每条线由两个点 pi
和 qi
给出,那么您可以计算
vi = (qi - pi)/sqrt(转置(qi - pi) * (qi - pi))
关于python - D 维空间中 N 条线的最近点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56315244/