關于Numpy中argsort()函數的用法解讀
Numpy中argsort()函數的用法
argsort()函數的作用是將數組按照從小到大的順序排序,并按照對應的索引值輸出。
argsort()函數中,當axis=0時,按列排列;當axis=1時,按行排列。如果省略默認按行排列。
下邊通過例子來說明其用法
#!/usr/bin/env python # -*- coding:utf-8 -*- from numpy import * a = [3, 5, 1] b = argsort(a) print("a排序為:", end='') print(b) c = [[8, 3, 7], [1, 5, 9]] d = argsort(c) # 默認按行排序 print("默認按行排序c為:") print(d) print("按行排序c為:") print(argsort(c, axis=1)) print("按行列排序c為:") print(argsort(c, axis=0))
運行結果為:
Numpy.argsort()函數使用(以按矩陣指定列對各行排序為例)
該方法返回的是矩陣a要素排序后的索引數據,干說無用,以二維數組為例,按照指定列,如第0列,進行排序。
Python代碼:
首先看代碼,再逐行解釋。
import numpy as n a = np.array([[0, 11, 12], [2, 2, 3], [7, 8, 9], [1, 2, 3]]) ind = np.argsort(a, axis=0) print(a) print(ind) print(a[ind[:, 0]]) # Output: # [[ 0 11 12] # [ 2 2 3] # [ 7 8 9] # [ 1 2 3]] # [[0 1 1] # [3 3 3] # [1 2 2] # [2 0 0]] # [[ 0 11 12] # [ 1 2 3] # [ 2 2 3] # [ 7 8 9]]
待排序數組"a":
[[ 0 11 12]
[ 2 2 3]
[ 7 8 9]
[ 1 2 3]]
使用Numpy.argsort對a的各行進行比較,首先會比較a每行的第一列的數值,按第一列數值從小到大排序,再取第二列的值比較,如此往復,最后返回各個元素的在a中的索引值矩陣,將a各元素的索引值放到排序后的位置,你將得到這樣一個索引矩陣"ind":
索引矩陣"ind":
[[[0 1 1]
[[3 3 3]
[[1 2 2]
[ [2 0 0]]
第0列[0 3 1 2]分別表示a[0][0], a[0][3], a[0][1], a[0][2]在a第0列的索引值,同理ind的第1列表示在a第1列的索引值,由于a[0][0]最小所以它還是在第一個位置,a[0][2]最大,所以被放置到了最后一個位置,所以a[0][2]的索引2就在ind矩陣第0列中的最后一個位置。
最后,我們可以取ind的第0列,將矩陣a的各行按照這列的索引排序,即第0行不變,第1行放原先第3行[1 2 3],第2行放原先第1行[2 2 3],第3行放原先第2行[7 8 9],排序后的數組如下:
排序后的數組"a":
[[[ 0 11 12]
[ [ 1 2 3]
[ [ 2 2 3]
[ [ 7 8 9]]]
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
python實現(xiàn)爬蟲統(tǒng)計學校BBS男女比例之多線程爬蟲(二)
這篇文章主要介紹了python實現(xiàn)爬蟲統(tǒng)計學校BBS男女比例之多線程爬蟲,感興趣的小伙伴們可以參考一下2015-12-12