python使用numpy實現多維陣列的排序

2021-10-12 21:59:09 字數 1833 閱讀 6970

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...