首页 > 解决方案 > 如何在python中导出规则网格的一些特定点

问题描述

我有坐标点 (xy) 并想重新排列它们。所有点都存储在一个列表中。List 有几个数组,并且数组有唯一的x值:

sp_arr=[np.array([[1., 8.]]), np.array([[2., 8.], [2., 9.]]), \
        np.array([[3., 8.], [3., 9.], [3., 10.]]),\
        np.array([[4., 8.], [4., 9.], [4., 10.]]),\
        np.array([[5., 9.], [5., 10.]]), np.array([[6., 9.], [6., 10.]]),\
        np.array([[7., 10.]]), np.array([[8., 10.]])]

如果数组的长度小于1,我什么也不做。我上传了一个无花果来可视化我想要的东西。图有三个矩形,我想根据它们重新排列我的点。数组长度的变化对我来说是最重要的信号。它从第二个数组变为第三个数组。所以,我需要提取所有较短(第二个)数组2的行和第三个(较短数组的长度)行。我提取第三个数组的第一2行,因为y第三个(较长)数组中的平均值高于较短的数组。如果它更少,我会导出最后2一行。

矩形 2 包含长度最大的数组。

从第四到第五个数组,长度变化(矩形3)。我再次保留所有较短数组的行(第五和第六)和2(较短数组的长度)较长的行。平均值y是较短的数组更高,所以我保留最后两行较长的数组。最后,我想要以下结果:

surfs=[np.array([[2., 8.], [2., 9.], [3., 8.], [3., 9.]]), \ # first rectangle
       np.array([[3., 8.], [3., 9.], [3., 10.], [4., 8.], [4., 9.], [4., 10.]]),\# second rectangle
       np.array([[4., 9.], [4., 10.], [5., 9.], [5., 10.], [6., 9.], [6., 10.]]) # last rectangle]

我尝试了以下代码,但没有成功:

surfs=[]
for i in range(len(sp_ar)-1):
    if 1 < len(sp_ar[i]):
        if sp_ar[i][-1][1] != sp_ar[i+1][-1][1] or sp_ar[i][0][1] != sp_ar[i+1][0][1]:
            if np.mean (sp_ar[i][:,1]) < np.mean (sp_ar[i+1][:,1]):
                surfs.append([sp_ar[i],sp_ar[i+1][0:len(sp_ar[i])]])
            if np.mean (sp_ar[i][:,1]) > np.mean (sp_ar[i+1][:,1]):
                surfs.append([sp_ar[i], sp_ar[i+1][-len(sp_ar[i]):]])

在此之前,我非常感谢任何帮助。 在此处输入图像描述

标签: pythonarraysalgorithmsplitgeometry

解决方案


推荐阅读