返回顶部
首页 > 资讯 > 后端开发 > Python >浅谈numpy.where() 的用法和np.argsort()的用法说明
  • 111
分享到

浅谈numpy.where() 的用法和np.argsort()的用法说明

2024-04-02 19:04:59 111人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

numpy.where() 有两种用法: 1. np.where(condition, x, y) 满足条件(condition),输出x,不满足输出y。 如果是

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)
>>> a
array([[[ 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 np
x = 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.unravel_index的理解~


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

参数说明:indices数组

dims数组的维度大小

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

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

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

简单解释一下,22/6=3......4

总算写完了!

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。如有错误或未考虑完全的地方,望不吝赐教。

--结束END--

本文标题: 浅谈numpy.where() 的用法和np.argsort()的用法说明

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

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

猜你喜欢
  • 浅谈numpy.where() 的用法和np.argsort()的用法说明
    numpy.where() 有两种用法: 1. np.where(condition, x, y) 满足条件(condition),输出x,不满足输出y。 如果是...
    99+
    2024-04-02
  • 如何使用numpy.where() 和np.argsort()方法
    如何使用numpy.where() 和np.argsort()方法?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。numpy.where() ...
    99+
    2023-06-15
  • 浅谈replaceAll的用法
    replaceAll是一个字符串的方法,用于替换字符串中的指定字符或字符序列。它的用法如下:1. replaceAll(String...
    99+
    2023-09-09
    replaceAll
  • python sys.stdin和sys.stdout的用法说明
    1、sys.stdin.readline()与input import sys # sys.stdin.readline() 相当于input,区别在于input不会读入'\n'...
    99+
    2024-04-02
  • vue3$attrs和inheritAttrs的用法说明
    目录$attrs和inheritAttrs用法在父组件app.vue中子组件 myInput.vue 设置 inheritAttrs: true(默认)子组件 myInput.vue...
    99+
    2024-04-02
  • Mybatis动态SQL之where标签用法说明
    目录关于where标签用法使用where标签及一些注意点where标签简单使用关于where标签用法 xml映射文件部分内容: <sel...
    99+
    2024-04-02
  • Java Scanner的使用和hasNextXXX()的用法说明
    目录输入输出输出输入使用Scanner读取使用Scanner循环读取N个数字/字符串关于Scanner中nextxxx()须注意的一点输入输出 输出 基本语法 System.ou...
    99+
    2024-04-02
  • vue中的addEventListener和removeEventListener用法说明
    目录addEventListener和removeEventListener用法说明1、添加监听事件(addEventListener)2、移出监听事件(removeEventLis...
    99+
    2024-04-02
  • python的partial()用法说明
    在functools模块中有一个工具partial(),可以用来"冻结"一个函数的参数,并返回"冻结"参数后的新函数。 很简单的解释,也是官方手册给的示例。对于int()函数,它可以将给定的数值转换成十进制整数,转换时可以指定以几进制的方...
    99+
    2023-01-30
    python partial
  • Python中的lambda和apply用法及说明
    目录1 lambda1.1 举最简单的例子1.2 再举一个普通的例子2 Apply2.1 举例2.2 下面的例子是DataFrame中apply的用法总结1 lambda lambd...
    99+
    2022-12-21
    Python中lambda用法 Python中apply用法 lambda和apply用法
  • mysql sum(if())和count(if())的用法说明
    目录mysql sum(if())和count(if())的用法解析mysql 聚合函数 根据条件求和 sum(if())mysql sum(if())...
    99+
    2024-04-02
  • python中的plt.cm.Paired用法说明
    plt.cm中cm全称表示colormap paired表示两个两个相近色彩输出,比如浅蓝、深蓝 ;浅红、深红;浅绿,深绿这种。 补充:【python】plt.cm.Spectral,颜色分配 plt.cm.Spec...
    99+
    2022-06-02
    python plt.cm.Paired
  • python 中sys.getsizeof的用法说明
    科班出身的码畜一直被灌输一条上帝圣经:“一个int占4个字节,一个char占1个字节,一个float占4个字节。。。”, 今天看下了python的getsizeof函数,发现python中各个基本数据类型(对象)占用...
    99+
    2022-06-02
    python sys.getsizeof
  • Python中sub()的用法说明
    Python来进行查询和替换一个文本字符串? 可以使用sub()方法来进行查询和替换,sub方法的格式为: sub(replacement, string[, count=0])...
    99+
    2024-04-02
  • pytorch中[..., 0]的用法说明
    在看程序的时候看到了x[…, 0]的语句不是很理解,后来自己做实验略微了解,以此记录方便自己查看。 b=torch.Tensor([[[[10,2],[4,5],[7,8]],[...
    99+
    2024-04-02
  • 浅谈C#中[]的几种用法
    目录一、导入外部DLL函数二、结构体时表明属性一、导入外部DLL函数 如[DllImport(“kernel32.dll”)]这叫引入kernel32.dll...
    99+
    2023-01-28
    C# []用法 C# []
  • Lambda表达式的说明和实例用法
    本篇内容介绍了“Lambda表达式的说明和实例用法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Lambda表达式,一种简单的匿名内部类(但...
    99+
    2023-06-02
  • cmd del命令的说明和具体用法
    这篇文章主要介绍“cmd del命令的说明和具体用法”,在日常操作中,相信很多人在cmd del命令的说明和具体用法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”cmd del命令的说明和具体用法”的疑惑有所...
    99+
    2023-06-08
  • JS中newDate()各方法的用法说明
    目录JS中 new Date() 各方法的用法1.new Date() 参数篇2.方法篇3.国标时间、时间戳、年月日 时分秒的转换JS中 new Date() 各方法的用法 1.ne...
    99+
    2022-12-19
    JS中 new Date() 各方法的用法 JS中 new Date() JS中 new Date() 用法
  • mysql 的indexof函数用法说明
    如下所示: LOCATE(substr,str) 返回子串substr在字符串str第一个出现的位置,如果substr不是在str里面,返回0. mysql> select LOCATE('bar'...
    99+
    2022-05-24
    mysql indexof函数
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作