【问题标题】:How to sort a numpy array based on the both arrays and also conditions如何根据数组和条件对 numpy 数组进行排序
【发布时间】:2021-03-08 09:53:11
【问题描述】:

我有一个三列数百行的 numpy 数组。我想根据两列对其进行排序,并且在某些情况下还要考虑排序中的第三列。这是我的输入(它们是xyz 坐标):

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) 修改此排序。关键问题是我必须根据xy 对我的数据进行排序,并且不能将其更改为xzyz,因为它会改变所有点的顺序.这是我的排序代码:

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


    【解决方案1】:

    你可以定义一个排序函数,比如

    sortfunc = my_point[:, 0] * 100 + my_point[:, 1] * 10 - my_point[:, 2]
    
    idx = np.argsort(sortfunc)
    my_point[idx]
    # 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]])
    

    当然,10010-1 的系数是调整的问题。

    【讨论】:

    • 亲爱的@Nils Werner,很抱歉我迟到的反馈。从昨天开始,我一直在处理我的数据。你的方法完全没问题,但有了新数据,我有一个大问题,根本无法调整系数。你知道其他方法吗?
    • 不,但我建议你用新的数据和问题打开另一个问题。
    • 亲爱的@Nils Werner,感谢您的帮助。我很感激。
    猜你喜欢
    • 2013-09-30
    • 1970-01-01
    • 1970-01-01
    • 2022-08-15
    • 2018-11-01
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    • 2015-01-10
    相关资源
    最近更新 更多