複合で多次元配列をソートする方法
配列など:
import numpy as np
data = np.array([[2,2,5],[2,1,3],[1,2,3],[3,1,4]])
data
array([[2,2,5],[2,1,3],[1,2,3],[3,1,4]])
配列を最初の列の昇順、2番目の列の昇順、および3番目の列の昇順で並べ替えます。
idex=np.lexsort([data[:,2], data[:,1], data[:,0]])
sorted_data = data[idex,:]
sorted_data
array([[1,2,3],[2,1,3],[2,2,5],[3,1,4]])
次に、最初の列の降順、2番目の列の昇順、3番目の列の昇順で配列を並べ替えます。
idex=np.lexsort([data[:,2], data[:,1],-1*data[:,0]])
sorted_data = data[idex,:]
sorted_data
array([[3,1,4],[2,1,3],[2,2,5],[1,2,3]])
補足拡張:python:多次元配列の降順
残念ながら、pythonでは、指定された次元に従って多次元配列を降順でソートする方法はありません。
ただし、1次元配列には降順があり、これで十分です。
# Author: Right.Q
# 多次元マトリックスの逆順配置を実現
def descend_sort(array):'''3次元配列を逆の順序で並べ替えます'''[height, width, channel]= array.shape
sortArray = np.zeros([height, width, channel])for h inrange(height):for w inrange(width):
sortArray[h, w,:]=sorted(array[h, w,:], reverse=True)return sortArray
正式なパラメータは、指定された3次元配列です。さらに次元がある場合は、次元を自動的に識別できます。
上記の多次元配列(配列)ソートのpython実装は、エディターによって共有されるすべてのコンテンツです。参照を提供したいと思います。
Recommended Posts