关于Numpy中argsort()函数的用法解读
作者:SophiaCV
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]]]
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。