返回顶部
首页 > 资讯 > 精选 >如何使用numpy.where() 和np.argsort()方法
  • 899
分享到

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

2023-06-15 00:06:48 899人浏览 独家记忆
摘要

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

如何使用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.htmlHttps://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()方法

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

--结束END--

本文标题: 如何使用numpy.where() 和np.argsort()方法

本文链接: https://lsjlt.com/news/276189.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何使用numpy.where() 和np.argsort()方法
    如何使用numpy.where() 和np.argsort()方法?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。numpy.where() ...
    99+
    2023-06-15
  • 浅谈numpy.where() 的用法和np.argsort()的用法说明
    numpy.where() 有两种用法: 1. np.where(condition, x, y) 满足条件(condition),输出x,不满足输出y。 如果是...
    99+
    2024-04-02
  • js如何使用reverse()方法
    这篇文章给大家分享的是有关js如何使用reverse()方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。反转数组reverse() 方法反转数组中的元素。您...
    99+
    2024-04-02
  • 如何使用np.where()[0] 和 np.where()[1]
    如何使用np.where()[0] 和 np.where()[1]?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。具体如下:import numpy...
    99+
    2023-06-08
  • thinkphp中where方法如何用
    这篇“thinkphp中where方法如何用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“thinkphp中whe...
    99+
    2023-06-30
  • SQL中having和where如何使用
    这篇文章将为大家详细讲解有关SQL中having和where如何使用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。“Where...
    99+
    2024-04-02
  • python中np.where()的使用方法
    np.where有两种用法 np.where(condition, x, y) 当 where 内有三个参数时,第一个参数表示条件,当条件成立时 where...
    99+
    2023-09-09
    python numpy 机器学习
  • thinkphp的where()方法怎么使用
    这篇文章主要讲解了“thinkphp的where()方法怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“thinkphp的where()方法怎么使用”吧!wher&...
    99+
    2023-06-22
  • MYSQL如何使用infile/outfile
    这篇文章给大家分享的是有关MYSQL如何使用infile/outfile的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。由于现有的东家要求使用MYSQL数据库,所以最近也...
    99+
    2024-04-02
  • tp5中where与whereor如何同时使用
    小编给大家分享一下tp5中where与whereor如何同时使用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!tp5中的where与...
    99+
    2023-06-14
  • 怎么在Laravel中使用where方法
    这期内容当中小编将会给大家带来有关怎么在Laravel中使用where方法,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。在Laravel中的可以同时使用多个where,所以我们可以每个...
    99+
    2023-06-14
  • Linux whereis命令的使用方法
    这篇文章的内容主要围绕Linux常用命令whereis命令的使用方法进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!Linux常用命令whe...
    99+
    2023-06-28
  • Laravel中where的高级使用方法
    这篇文章主要介绍了Laravel中where的高级使用方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。有时候项目中需要进行多个字段搜索就可以用到此方法在Larav...
    99+
    2023-06-08
  • MySQL中where 1=1方法怎么使用
    这篇文章主要介绍了MySQL中where 1=1方法怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MySQL中where 1=1方法怎么使用文章都会有所收获,下面...
    99+
    2023-06-30
  • linux下whereis命令的使用方法
    本篇内容介绍了“linux下whereis命令的使用方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!linux/Unix可以使用...
    99+
    2023-06-13
  • LINQ中如何使用Where扩展
    本篇文章为大家展示了LINQ中如何使用Where扩展,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。我们除了可以如下方式书写带Where子句的LINQ外:from p&n...
    99+
    2023-06-17
  • numpy的linspace()函数如何使用
    这篇“numpy的linspace()函数如何使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“numpy的lin...
    99+
    2023-06-27
  • linux whereis命令如何使用
    这篇文章主要讲解了“linux whereis命令如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“linux whereis命令如...
    99+
    2023-02-07
    linux whereis
  • Mybatis的where标签如何使用
    这篇文章主要讲解了“Mybatis的where标签如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Mybatis的where标签如何使用”吧!原始的手动拼接在不使用...
    99+
    2023-06-30
  • Java @PostMapping和@GetMapping方法如何使用
    本文小编为大家详细介绍“Java @PostMapping和@GetMapping方法如何使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java @PostMapping和@GetMapping方法如何使用”文章能...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作