繁体   English   中英

给定 R^p 中的 2 个多维点,如何在通过这两个点的线上投影 N 个个体?

[英]Given 2 multidimensionals points in R^p, how to project N individuals on the line passing through those two points?

我在 R^p 中有 2 个点,我想在通过这两个点的线上投影 N 个个体。 确切地说,我想要由这条线创建的一维空间上每 N 个个体的坐标。

操作将在不同的点上重复多次,因此需要一种自动方法。 我想知道它是否存在一个包来找到这条线的方程。 该投影应该易于实施。

编辑(Vishwas 评论):

给定两个点Y1 =(1,4)Y2 =(5,6)做投影( https://en.wikipedia.org/wiki/Projection_(mathematics)的){X1,...,XN}中R2 到通过 y1 和 y2 的线上。

预期输出:原始空间中每个投影点 {x1,...,xN} 的坐标。

对于某些合适的 ti,点 xi 的投影是 zi = y1 + ti × (y2 - y1)。 剩下的差 xi - zi 与直线正交,所以点积 (xi - zi) • (y2 - y1) = 0。输入 zi 的定义,你会得到一个在 ti 中线性的方程。 您可以为 ti 求解,然后使用它来计算 zi。

如果你想对许多点进行这个操作,你可以想出一个预计算来表达整个操作,例如矩阵乘法。 由于您投影到会费的线不一定通过原点,因此您需要一个假设变换,它可以表示为作用于齐次坐标的 (p+1) × (p+1) 矩阵。

让我们将命名法切换为单字母符号。 让您的线由点 a 和 b 定义。 我们将点 x 投影到 z = a + t (b - a)。 所以你得到 0 = (x - a - t (b - a)) • (b - a) = (x - a) • (b - a) - t (b - a) • (b - a)可以求解 t = ((x - a) • (b - a)) / ((b - a) • (b - a))。

这是一些 Python 代码,您可以使用它们与您的实现进行比较:

def project(p, a, b, xs):
  ab = [b[i] - a[i] for i in range(p)]
  abab = sum(i*i for i in ab)
  zs = []
  for x in xs:
    t = sum((x[i] - a[i])*ab[i] for i in range(p)) / abab
    z = [a[i] + t*ab[i] for i in range(p)]
    zs.append(z)
  return zs

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM