【发布时间】:2021-03-08 09:53:11
【问题描述】:
我有一个三列数百行的 numpy 数组。我想根据两列对其进行排序,并且在某些情况下还要考虑排序中的第三列。这是我的输入(它们是x、y 和z 坐标):
my_point=np.array([[1., 2., 90.9],
[1., 0., 100.1],
[1.8, 0., 2.8],
[1.8, 2., 3.1],
[1.8, 1., 2.7],
[3., 0., 3.],
[3., 2., 2.9],
[2., 1., 100.],
[2., 0., 100.]])
首先,我想根据第一列 (x) 和第二列 (y) 对其进行排序,然后根据第三列 (z) 修改此排序。关键问题是我必须根据x 和y 对我的数据进行排序,并且不能将其更改为x 和z 或y 和z,因为它会改变所有点的顺序.这是我的排序代码:
result_array=my_point[np.lexsort((my_point[:,1],my_point[:,0]))]
它给了我:
array([[1., 0., 100.1],
[1., 2., 90.9],
[1.8, 0., 2.8],
[1.8, 1., 2.7],
[1.8, 2., 3.1],
[2., 0., 100.],
[2., 1., 100.],
[3., 0., 3. ],
[3., 2., 2.9]])
这是正确的,但我想根据第三列修改我的排序。我想考虑这一列的值,当它与相邻行有很大不同时。正如result_array 所示,与接下来的两行相比,其第二、第三和第四行的第三列([1.8, 0., 2.8]、[1.8, 1., 2.7] 和[1.8, 2., 3.1])的值非常低。这些行的x 值仅比下一行高一点,在这种情况下,我想忽略它并优先考虑z 值:
array([[1., 0., 100.1],
[1., 2., 90.9],
[2., 0., 100.],
[2., 1., 100.],
[1.8, 0., 2.8],
[1.8, 1., 2.7],
[1.8, 2., 3.1],
[3., 0., 3. ],
[3., 2., 2.9]])
为了更清楚起见,我上传了一个图,显示了我想要的 3d 空间中的点顺序。我认为它可以通过定义一个排序函数来完成,但我不知道如何去做。 在此之前,我非常感谢任何帮助。
【问题讨论】:
标签: python numpy sorting conditional-statements