Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中根据点的距离分离点并查找点的角点_Python_Algorithm_Numpy_Distance_Point - Fatal编程技术网

如何在python中根据点的距离分离点并查找点的角点

如何在python中根据点的距离分离点并查找点的角点,python,algorithm,numpy,distance,point,Python,Algorithm,Numpy,Distance,Point,我在3d空间中有一些点(x,y和z)。这些点集作为数组存储在列表中。我复制了一个具有两个点集的简化示例: all_points=[[np.array([[6.8,1.,0.1], [6.8,3.,0.1], [6.8,6.,0.1],\ [5.8,1.,1.1], [5.8,3.,1.1], [5.8,6.,1.1],\ [4.8,1.,2.], [4.8,3.,2.], [4.8,6.,2.],\

我在3d空间中有一些点(
x
y
z
)。这些点集作为数组存储在列表中。我复制了一个具有两个点集的简化示例:

all_points=[[np.array([[6.8,1.,0.1], [6.8,3.,0.1], [6.8,6.,0.1],\
                       [5.8,1.,1.1], [5.8,3.,1.1], [5.8,6.,1.1],\
                       [4.8,1.,2.], [4.8,3.,2.], [4.8,6.,2.],\
                       [3.8,1.,3.], [3.8,3.,3.], [3.8,6.,3.],\
                       [2.8,1.,4.1], [2.8,3.,4.1], [2.8,6.,4.1]]),\
             np.array([[5.,1.,2.], [5.,3.,2.], [5.,6.,2.],[6.,1.,1.2],\
                       [4.,1.,3.], [4.,3.,3.], [4.,6.,3.],[5.5,3.,1.5],\
                       [6.,1.,3.], [6.,3.,3.], [6.,6.,3.],\
                       [7.,1.,4.], [7.,3.,4.], [7.,6.,4.],\
                       [3.,1.,4.], [3.,3.,4.], [3.,6.,4.]])]]
我的点集正常或不正常。如果我根据它们的
z
对它们进行排序时,
x
值只会增加或减少,则它们是正常的。图中的蓝点清晰地显示了正常类型。但是黑色方块显示了一个不正常的点集。这两个集合是相互关联的,因为异常集合的某些点接近正常集合。正常和异常集合中
y
值的最小值和最大值是固定的(
1
6
)。在正常设置中,我只需要它们的四个角(图中的绿色箭头所示)。该代码为我提供了四个角:

four_corners=[]
for points in all_points:
    for sub_points in points:
        sorted_sub=np.sort(sub_points.view('i8,i8,i8'), order=['f2', 'f1'], axis=0).view('float')
        le_st=sorted_sub[np.where(sorted_sub[:,2] == sorted_sub[0,2])]
        le_st=len(le_st)
        le_en=sorted_sub[np.where(sorted_sub[:,2] == sorted_sub[-1,2])]
        le_en=len(le_en)
        cor=np.array([sorted_sub[0,:], sorted_sub[int((le_st-1)),:], sorted_sub[-1,:], sorted_sub[-le_en,:]])
        four_corners.append(cor)
异常点集可分为两组:一组接近正常点集,另一组远离正常点集。阈值可以将它们分开。我尝试了以下代码来分离它们(我应该在这里自动传输我的正常数组和异常数组,但我已经手动编写了它们):

close_points
中,我希望点的
y
值再次为
min
max
1
6
)。我将它们命名为
y_min
y_max
子组,从每个子组中,我想要最小的
z
值。在“我的数据”中,它们由红色箭头显示:

[[6.,1.,1.2],[5.,6.,2.]]
最后,我想找到正常点集的两个点,它们最接近异常组的
闭合点的这两个点。它们是:

[[5.8,1.,1.1], [4.8,6.,2.]]
所以,我想要一种方法,首先区分哪个数组是正常的,哪个数组是异常的。然后找到我的正规集的四个简单角,并解释了反常集的四个解释点。该方法还应该能够区分哪些正常集与哪些异常集相连接。我可能有一个正常集和两个或三个连接的异常集,或者可能有两个正常集和一个连接到正常集的异常集。我非常感谢您对我在python中所做的一切的帮助。

[[6.,1.,1.2],[5.,6.,2.]]
[[5.8,1.,1.1], [4.8,6.,2.]]