1.問題描述
為實現對多維陣列按多列排序,如有三維陣列座標點(x,y,z),現需使其按照x進行公升序排序,其後使y進行公升序排序,最後為z。
# 有4行3列陣列如下:
arr = [[6 3 3]
[3 1 1]
[6 2 8]
[4 0 3]]
# 欲使其按如下排序
arrsort=[[3 1 1]
[4 0 3]
[6 2 8]
[6 3 3]]
2.解決方法
想來應該有方法可以直接實現,故作為**搬運工查後發現numpy.
lexsort()方法,官方文件解釋見超連結。筆者理解如下:
2.1 方法簡介
indicesaftersort = numpy.lexsort(keys, axis)
# 返回值indicesaftersort :排序後的索引即序號
# 引數keys:指排序鍵,可以是(k, n) numpy陣列,也可以是k個相同長度的序列構成的元組。
# 引數axis:好吧,我沒有弄明白,目前不影響使用。附官方文件(int, optional:axis to be indirectly sorted. by default, sort over the last axis.)
# 注意事項1:按照排序鍵優先順序從後先前,如keys為(x,y,z),排序結果按照先按z排序,然後y,最後x。
# 注意事項2:當輸入的排序鍵為二維陣列時按照行進行排序。排序鍵優先順序依舊從後先前
2.2 案例(還是案例最生動)
# 案例1
import numpy as np
arr = np.array([[6, 3, 6, 4], [3, 1, 2, 0], [3, 1, 8, 3]]).transpose()
print('%**********===原始資料(4行3列)***************==')
print(arr)
arrsortedindex = np.lexsort((arr[:, 2], arr[:, 1], arr[:, 0]))
print('%*****=按照x優先,y次級,z最後規則排序後*****==')
print(arr[arrsortedindex , :])
arrsortedindex = np.lexsort((arr[:, 0], arr[:, 1], arr[:, 2]))
print('%*****=按照z優先,y次級,x最後規則排序後*****==')
# 案例2 【針對注意事項2】
import numpy as np
arr = np.array([[6, 3, 6, 4], [3, 1, 2, 0]])
print('%**********===原始資料(二維陣列)***************')
print(arr)
arrsortedindex = np.lexsort(arr)
print('%***************==預設排序規則***************==')
使用python的numpy庫實現PCA演算法
usr bin env python coding utf 8 from numpy import 引數1 特徵值向量,引數2 比率 返回值 k 符合指定比率的topk k值 def setk eigvals,rate 0.9 eigvalind argsort eigvals 對特徵值進行排序 f...
python庫numpy的使用
python在構造機器學習應用程式時,numpy作為乙個重要的函式庫會被經常使用,裡面有便捷的向量和矩陣的計算函式 from numpy import 構造4 4的隨機矩陣 matrix mat random.rand 4,4 矩陣逆矩陣 invmat matrix.i 單位矩陣 matrix ma...
python實現矩陣乘法 不用numpy
在不使用numpy庫的情況下實現矩陣乘法,看起來很簡單,但這之中也是存在坑的。比如如下 class mat mul def mm self,a,b row len len a column len len b 0 cross len len b res mat 0 column len row le...