首先要知道原理 ,今天机器学习作业要将三维的点投影到三维直线上,以下记录方法
方法借鉴:3D空间点到直线的距离 - 知乎 (zhihu.com)第一种方法
x1、x2存的是数据集,d、t是直线的参数
fig = plt.figure() ax1 = plt.axes(projection='3d')
x = [-s0 * 250, s0 * 250] #投影的线的两个点的坐标,这里用的是过原点的直线 y = [-s1 * 250, s1 * 250] z = [-s2 * 250, s2 * 250] figure = ax1.plot(x,y,z,c='g')
for i in range(0,75): d = x1[i][0]*s0+ x1[i][1]*s1+x1[i][2]*s2 t = d/(s1*s1 + s2*s2 +s0*s0) x3 = s0*t y3 = s1*t z3 = s2*t ax1.scatter(x3, y3, z3, s=20, c='r', depthshade=True) for i in range(0, 75): d = x2[i][0] * s0 + x2[i][1] * s1 + x2[i][2] * s2 t = d / (s1 * s1 + s2 * s2 + s0 * s0) x3 = s0 * t y3 = s1 * t z3 = s2 * t ax1.scatter(x3, y3, z3, s=20, c='b', depthshade=True)
这边是效果图