关于Numpy中argsort()函数的用法解读

 更新时间:2023年06月14日 10:11:54   作者:SophiaCV  
这篇文章主要介绍了关于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 内存泄漏问题及解决过程

    记一次python 内存泄漏问题及解决过程

    最近工作中慢慢开始用python协程相关的东西,所以用到了一些相关模块,如aiohttp, aiomysql, aioredis等,用的过程中也碰到的很多问题,这里整理了一次内存泄漏的问题。分享到脚本之家平台,需要的朋友参考下
    2018-11-11
  • Python学习笔记嵌套循环详解

    Python学习笔记嵌套循环详解

    这篇文章主要介绍了Python学习笔记嵌套循环详解,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-07-07
  • Python3.x和Python2.x的区别介绍

    Python3.x和Python2.x的区别介绍

    python3.x与python2.x区别很大,这里搜索了一些相关内容,记录在此,供自己学习参考,有需要的朋友不妨看看
    2013-02-02
  • wxPython使用系统剪切板的方法

    wxPython使用系统剪切板的方法

    这篇文章主要介绍了wxPython使用系统剪切板的方法,涉及Python使用wx模块操作系统剪切板的技巧,需要的朋友可以参考下
    2015-06-06
  • Python父目录、子目录的相互调用方法

    Python父目录、子目录的相互调用方法

    今天小编就为大家分享一篇Python父目录、子目录的相互调用方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-02-02
  • Python对象循环引用垃圾回收算法详情

    Python对象循环引用垃圾回收算法详情

    这篇文章主要介绍了Python对象循环引用垃圾回收算法详情,文章围绕主题展开详细的内容戒杀,具有一定的参考价值,感兴趣的小伙伴可以参考一下
    2022-09-09
  • 一文带你搞懂Python中isinstance和type的区别

    一文带你搞懂Python中isinstance和type的区别

    在Python中,我们经常需要检查一个对象的类型,Python提供了两种方法来获取对象的类型:isinstance和type,这两种方法有什么区别呢,本文将详细介绍这两种方法的区别和使用,需要的朋友可以参考下
    2023-06-06
  • Pycharm使用Conda激活环境失败的问题解决

    Pycharm使用Conda激活环境失败的问题解决

    本文主要介绍了Pycharm使用Conda激活环境失败的问题解决,文中主要介绍了两种问题的解决,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09
  • Pyqt助手安装PyQt5帮助文档过程图解

    Pyqt助手安装PyQt5帮助文档过程图解

    这篇文章主要介绍了Pyqt助手安装PyQt5帮助文档过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • Python入门教程(十八)Python的For循环

    Python入门教程(十八)Python的For循环

    这篇文章主要介绍了Python入门教程(十八)Python的For循环,Python是一门非常强大好用的语言,也有着易上手的特性,本文为入门教程,需要的朋友可以参考下
    2023-04-04

最新评论