此代码的说明:确定某个点是否在一行的哪一侧

时间:2014-10-12 02:59:44

标签: python numpy vector linear-algebra perceptron

来源:http://datasciencelab.wordpress.com/2014/01/10/machine-learning-classics-the-perceptron/

"给定两个点(x1,y2)(x2,y2)的一行的一般等式是A + Bx + Cy = 0其中ABC可以用这两点来写。定义向量V = (A, B, C),任何点(x,y)都属于V'x = 0行,其中x = (1,x,y)。点积为正的点落在线的一侧,负值落在另一侧。"

我不太明白它是如何工作的。此外,这一行特别是:

self.V = np.array([xB*yA-xA*yB, yB-yA, xA-xB])

为什么Bxyb-ya决定?

为了它的价值,我学习了线性代数,所以我对数学概念非常熟悉(我意识到这是正常的),但它是如何完成的让我逃避。< / p>

1 个答案:

答案 0 :(得分:0)

为什么B由yb-ya决定? (或者更确切地说,y2 - y1为我们的例子)

该文本假设线方程为:A + B*x + C*y = 0

我们假设我们有两个点,P1(x1, y1)P2(x2, y2)

使用two-points form of the line equation,您将获得y - y1 = [(y2 - y1)/(x2 - x1)] * (x - x1)(基于P1P2

相同的等式可以发展为[(x2 -x1)*y1 + (y1 - y2)*x1] + (y2 - y1) * x + (x1 - x2) * y = 0

查看A + B*x + C*y = 0,您会看到:

  • A,是[(x2 -x1)*y1 + (y1 - y2)*x1] = x2*y1 - y2*x1

  • Bx的系数为(y2 - y1)

  • Cy的系数为(x1 - x2)

因此源代码中的值np.array([A, B, C])显示为np.array([xB*yA - xA*yB, yB - yA, xA - xB])