Python 二維數組使用lexsort(排序)


使用場景:

  1. 對指定行或列排序
  2. 先對某列排序;若有相等值,再根據相等值所在行(或列)排序;若還有想等值,一直往前遞推

下面為幾組數據介紹,可以理理思路

"""
1. 對指定行排序時 相同行中有相同的數時,參照相同數的上一行的大小
2. 若還相等,繼續遞進
"""
#arr2為自己設計的數據
arr2 = np.array([[1, 2, 1, 3], [4, 3, 3, 1], [4, 5, 6, 7]])
print("原數組為:\n", arr2)
#指定了arr2從第2行(此行對應索引號為1)排序,若有相等值,繼續在相等值所在上一行比較,往前一直遞推到第一行完結束
ind2 = np.lexsort(arr2[0:2, :])
print('\n排序后對應的索引為:', ind2, '\n')

#兩種還原數組的方法
A = arr2.T[ind2].T
B = arr2[:, ind2]
print("按要求排序后數組為:")
print("A:\n", A)
print("B:\n", B)


print('*'*30)


"""
1. 對指定列排序時 相同列中有相同的數時,參照相同數的上一列的大小 
2. 若還相等,繼續遞進
"""
#arr3為自己設計的數據
arr3 = np.array([[50, 50, 90], [90, 75, 80], [60, 70, 80], [85, 75, 80]])
print("原數組為:\n", arr3, '\n')

#1. 對arr3是按最后一列數值大小排序 排序后若最后一列相等,則在相等值對應的上一列再次比較,排序  若還有相等,往前遞進 
#2. 將 對列數值大小排序 轉變到 默認為對行數值大小排序(arr3.T)
#3. 返回排序后行每一元素所在列的索引
ind3 = np.lexsort(arr3.T)
print("排序后對應的索引為:", ind3, '\n')

#兩種還原數組的方法
print("按要求排序后數組為:")
#根據行索引,列索引顯示
print("A:\n", arr3[ind3, :])
print("B:\n", arr3[ind3, :])


print('*'*30)

#指定了arr3從最后一列排序,若有相等值,繼續在相等值所在上一列比較,往前一直遞推到第2列(此列對應索引號為1)結束
ind4 = np.lexsort(arr3.T[1:, :])
print("\n排序后對應的索引為:", ind4, '\n')

print("按要求排序后數組為:")
print(arr3[ind4, :])

  

 

來源

https://blog.csdn.net/zyripe/article/details/105152987


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM