一、基本介绍
1.1 功能
将一群无序二维平面点(大体上满足 m * n 矩阵分布,总计m*n个点),分别按x和y从小到大的顺序排序,以矩阵形式存储。
1.2 输入
一群二维平面点(x,y),本例中共15个点,组成3 * 5 的矩阵
[[564.0, 2564.0], [640.5, 1456.5], [3958.0, 1634.0], [2829.5, 1875.0], [2775.5, 2686.0], [3911.5, 2746.0], [2892.0, 472.0], [1809.5, 402.5], [1679.0, 2622.5], [4002.0, 544.0], [726.5, 338.5], [4986.5, 2804.5], [1738.0, 1514.5], [5025.5, 1705.5], [5068.0, 616.5]]
1.3 输出
x和y在一定误差允许范围内,排列后的矩阵每行的y基本相同,每列的x基本相同
排序后: [
[[726.5, 338.5], [1809.5, 402.5], [2892.0, 472.0], [4002.0, 544.0], [5068.0, 616.5]],
[[640.5, 1456.5], [1738.0, 1514.5], [2829.5, 1875.0], [3958.0, 1634.0], [5025.5, 1705.5]],
[[564.0, 2564.0], [1679.0, 2622.5], [2775.5, 2686.0], [3911.5, 2746.0], [4986.5, 2804.5]]
]
二、代码实现
coordinate = [[564.0, 2564.0], [640.5, 1456.5], [3958.0, 1634.0], [2829.5, 1875.0], [2775.5, 2686.0], [3911.5, 2746.0], [2892.0, 472.0], [1809.5, 402.5], [1679.0, 2622.5], [4002.0, 544.0], [726.5, 338.5], [4986.5, 2804.5], [1738.0, 1514.5], [5025.5, 1705.5], [5068.0, 616.5]]
#仅仅支持矩阵点无缺失的情况
def sign1(coordinate,width):
matrix = [] #矩阵
rows = 1
#初步处理,按y进行排序
coordinate.sort(key = lambda x:x[1],reverse=False)
#统计矩阵的行数与列数
for i in range(len(coordinate)):
#判断是否为最后一个元素
if i != len(coordinate)-1:
#统计矩阵的行数 width*0.05为 允许的y轴误差
if abs(coordinate[i][1]-coordinate[i+1][1]) > width*0.05:
rows = rows+1
columns = int(len(coordinate)/rows)
#转化矩阵形式
for row in range(rows):
matrix.append(coordinate[columns*row:columns*(row + 1)])
#维度
#print(np.array(matrix).shape)
#根据x坐标,重新排列矩阵
for row in range(rows):
matrix[row].sort(key = lambda x:x[0],reverse=False)
print("排序后:", matrix)
return matrix
sign1(coordinate,3600)
说明:width*0.05为划分行的最小差距,若该值设置的不合理,则可能影响排序的结果,造成一些点的缺失。