簡體   English   中英

用兩列對NumPy數組進行排序

[英]Sorting NumPy array with two columns

我有以下數組,其中包含XY坐標:

arr = array([[ 1.,  3.],
             [ 6.,  6.],
             [ 3.,  0.],
             [ 2.,  5.],
             [ 0.,  3.],
             [ 3.,  3.],
             [ 0.,  6.]])

我想知道如何通過首先對X進行排序然后對Y進行排序來對該數組進行排序。

我想要這樣的東西:

new_ arr = array([[ 0.,  3.],
                  [ 0.,  6.],
                  [ 1.,  3.],
                  [ 2.,  5.],
                  [ 3.,  0.],
                  [ 3.,  3.],
                  [ 6.,  6.]])

您可以使用np lexort函數,可以在此處閱讀更多內容

numpy.lexsort(keys,axis = -1)使用一系列鍵執行間接排序。

給定多個排序鍵(可以將其解釋為電子表格中的列),lexsort返回一個整數索引數組,該數組描述了按多個列排序的順序。 序列中的最后一個鍵用於主排序順序,倒數第二個鍵用於輔助排序順序,依此類推。 keys參數必須是可以轉換為相同形狀的數組的對象序列。 如果為keys參數提供了2D數組,則將其行解釋為排序鍵,並根據最后一行,倒數第二行等進行排序

import numpy as np
arr = np.array([[ 1.,  3.],
             [ 6.,  6.],
             [ 3.,  0.],
             [ 2.,  5.],
             [ 0.,  3.],
             [ 3.,  3.],
             [ 0.,  6.]])
ind = np.lexsort(np.transpose(arr)[::-1])

print (arr[ind])

>>>[[ 0.  3.]
 [ 0.  6.]
 [ 1.  3.]
 [ 2.  5.]
 [ 3.  0.]
 [ 3.  3.]
 [ 6.  6.]]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM