我的编程空间,编程开发者的网络收藏夹
学习永远不晚

如何使用numpy.where() 和np.argsort()方法

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何使用numpy.where() 和np.argsort()方法

如何使用numpy.where() 和np.argsort()方法?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

numpy.where() 有两种用法:

1. np.where(condition, x, y)

满足条件(condition),输出x,不满足输出y。

如果是一维数组,相当于[xv if c else yv for (c,xv,yv) in zip(condition,x,y)]

>>> aa = np.arange(10)>>> np.where(aa,1,-1)array([-1,  1,  1,  1,  1,  1,  1,  1,  1,  1])  # 0为False,所以第一个输出-1>>> np.where(aa > 5,1,-1)array([-1, -1, -1, -1, -1, -1,  1,  1,  1,  1])>>> np.where([[True,False], [True,True]],    # 官网上的例子    [[1,2], [3,4]],             [[9,8], [7,6]])array([[1, 8],    [3, 4]])

上面这个例子的条件为[[True,False], [True,False]],分别对应最后输出结果的四个值。第一个值从[1,9]中选,因为条件为True,所以是选1。第二个值从[2,8]中选,因为条件为False,所以选8,后面以此类推。类似的问题可以再看个例子:

>>> a = 10>>> np.where([[a > 5,a < 5], [a == 10,a == 7]],             [["chosen","not chosen"], ["chosen","not chosen"]],             [["not chosen","chosen"], ["not chosen","chosen"]])array([['chosen', 'chosen'],       ['chosen', 'chosen']], dtype='<U10')

2. np.where(condition)

只有条件 (condition),没有x和y,则输出满足条件 (即非0) 元素的坐标 (等价于numpy.nonzero)。这里的坐标以tuple的形式给出,通常原数组有多少维,输出的tuple中就包含几个数组,分别对应符合条件元素的各维坐标。

>>> a = np.array([2,4,6,8,10])>>> np.where(a > 5)    # 返回索引(array([2, 3, 4]),)   >>> a[np.where(a > 5)]     # 等价于 a[a>5]array([ 6,  8, 10])>>> np.where([[0, 1], [1, 0]])(array([0, 1]), array([1, 0]))

上面这个例子条件中[[0,1],[1,0]]的真值为两个1,各自的第一维坐标为[0,1],第二维坐标为[1,0] 。

下面看个复杂点的例子:

>>> a = np.arange(27).reshape(3,3,3)>>> aarray([[[ 0,  1,  2],        [ 3,  4,  5],        [ 6,  7,  8]],       [[ 9, 10, 11],        [12, 13, 14],        [15, 16, 17]],       [[18, 19, 20],        [21, 22, 23],        [24, 25, 26]]])>>> np.where(a > 5)(array([0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2]), array([2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 2]), array([0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2]))# 符合条件的元素为    [ 6,  7,  8]],      [[ 9, 10, 11],       [12, 13, 14],       [15, 16, 17]],      [[18, 19, 20],       [21, 22, 23],       [24, 25, 26]]]

所以np.where会输出每个元素的对应的坐标,因为原数组有三维,所以tuple中有三个数组。

需要注意的一点是,输入的不能直接是list,需要转为array或者为array才行。比如range(10)和np.arange(10)后者返回的是数组,使用np.where才能达到效果。

np.argsort()的用法

numpy.argsort(a, axis=-1, kind='quicksort', order=None)

argsort(a)#获取a从小到大排列的数组

argsort(-a)#获取a从大到小排列的数组

argmin(a)#获取a最小值下标

argmax(a)#获取a最大值下标

功能: 将矩阵a按照axis排序,并返回排序后的下标

参数: a:输入矩阵, axis:需要排序的维度

返回值: 输出排序后的下标

(一维数组)

import numpy as npx = np.array([1,4,3,-1,6,9])x.argsort()# array([3, 0, 1, 2, 4, 5], dtype=int64)

可以发现,argsort()是将X中的元素从小到大排序后,提取对应的索引index,然后输出到y

如x[3]=-1最小,x[5]=9最大

所以取数组x的最小值可以写成:

x[x.argsort()[0]]

或者用argmin()函数

x[x.argmin()]

数组x的最大值,写成:

x[x.argsort()[-1]]  # -1代表从后往前反向的索引

或者用argmax()函数,不再详述

x[x.argmax()]

输出排序后的数组

 x[x.argsort()]# 或x[np.argsort(x)]

(二维数组)

x = np.array([[1,5,4],[-1,6,9]])# [[ 1  5  4]# [-1  6  9]]

沿着行向下(每列)的元素进行排序

np.argsort(x,axis=0)# array([[1, 0, 0],#        [0, 1, 1]], dtype=int64)

沿着列向右(每行)的元素进行排序

np.argsort(x,axis=1)# array([[0, 2, 1],#        [0, 1, 2]], dtype=int64)

补充:Numpy.unravel_index()和Numpy.argsort()

由于编程和文笔都较差,写的不好请见谅...

今天下午学习LDA模型的python实现,其中用到了Numpy库,想详细了解用到的每个函数,便在网上找资料。

其中遇到了Numpy.unravel_index()和Numpy.argsort(),看了好半天才弄懂orz心血来潮记录一下

首先,附上英文官方文档。https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.argsort.html和https://docs.scipy.org/doc/numpy/reference/generated/numpy.unravel_index.html

讲讲我对Numpy.argsort()的理解:

numpy.argsort(a, axis=-1, kind='quicksort', order=None)

参数说明:a要排序的数组,

axis整型或者None,如果是None,数组将变成扁平数组(即变成一行数组)

kind排序算法,快排,归并排序,堆排序...

order自定义字段顺序

返回: index_array :n维下标数组

实例:一维数组

如何使用numpy.where() 和np.argsort()方法

二维数组

如何使用numpy.where() 和np.argsort()方法

然后讲讲我对numpy.unravel_index的理解~

numpy.unravel_index(indices, dims, order='C')

参数说明:indices数组

dims数组的维度大小

order:{C,F}(C行为主,F列为主)

返回: unraveled_coords为n维数组的元组

实例: 这个地方想了好久才明白T T

如何使用numpy.where() 和np.argsort()方法

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网行业资讯频道,感谢您对编程网的支持。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

如何使用numpy.where() 和np.argsort()方法

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何使用numpy.where() 和np.argsort()方法

如何使用numpy.where() 和np.argsort()方法?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。numpy.where() 有两种用法:1. n
2023-06-15

如何使用np.where()[0] 和 np.where()[1]

如何使用np.where()[0] 和 np.where()[1]?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。具体如下:import numpy as np a = np.a
2023-06-08

thinkphp中where方法如何用

这篇“thinkphp中where方法如何用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“thinkphp中where方法如
2023-06-30

Java @PostMapping和@GetMapping方法如何使用

本文小编为大家详细介绍“Java @PostMapping和@GetMapping方法如何使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java @PostMapping和@GetMapping方法如何使用”文章能帮助大家解决疑惑,下
2023-07-05

RedisTemplate中opsForValue和opsForList方法如何使用

RedisTemplate中opsForValue和opsForList方法如何使用,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、opsForValue用法key:字符
2023-06-20

python中 os._exit() 和 sys.exit()方法如何使用

python中 os._exit() 和 sys.exit()方法如何使用,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。os._exit() 和 sys.exit()os._e
2023-06-02

JavaScript如何使用reduce方法实现求和

这篇文章主要为大家展示了“JavaScript如何使用reduce方法实现求和”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JavaScript如何使用reduce方法实现求和”这篇文章吧。使用
2023-06-17

如何在php中使用get和Post方法

如何在php中使用get和Post方法?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1、get方式的安全性比Post方式差,但是,执行效率比Post方法好。如果包括机密信息
2023-06-15

JavaScript中如何使用 .map()、.reduce() 和 .filter()方法

这篇文章主要为大家展示了“JavaScript中如何使用 .map()、.reduce() 和 .filter()方法”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JavaScript中如何使用
2023-06-02

split()方法如何使用

这篇“split()方法如何使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“split()方法如何使用”文章吧。split
2023-07-05

window.setInterval()方法如何使用

window.setInterval()方法用于按照指定的时间间隔重复执行某个函数或代码。语法:window.setInterval(function, milliseconds);参数:- function:要重复执行的函数或代码块。-
2023-08-11

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录