numpy中实现ndarray数组返回符合特定条件的索引方法

 更新时间:2018年04月17日 09:15:25   作者:wen123qiang  
下面小编就为大家分享一篇numpy中实现ndarray数组返回符合特定条件的索引方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

在numpy的ndarray类型中,似乎没有直接返回特定索引的方法,我只找到了where函数,但是where函数对于寻找某个特定值对应的索引很有用,对于返回一定区间内值的索引不是很有效,至少我没有弄明白应该如何操作尴尬。下面先说一下where函数的用法吧。

(1)where函数的使用场景:

例如现在我生成了一个数组:

import numpy as np 
arr=np.array([1,1,1,134,45,3,46,45,65,3,23424,234,12,12,3,546,1,2]) 

现在arr是一个含有18个元素的ndarray类型的数组,后面就用数组来称呼它吧。假如我想返回数组中所有元素值为3所对应的索引位置,那么通过where函数可以很轻松地完成。

print np.where(arr==3) 

它会返回一个包含所有值为3对应的索引位置的元组,如下图:

可以看到在索引为5、9、14的地方所对应的元素值为3。通过这样的方式可以轻松达到目的。但是对于一定变化范围内的索引这样就不行了。下面的方法是自己想出来的折衷办法,比较笨,高手清喷。

(2)通过一个辅助的数组来解决一定范围内值索引的查找

我们建一个标识元素索引的数组,然后通过它来显示符合条件的元素对应的索引。还是刚才的数组,假如我现在要返回元素值在3到100之间值的索引。我可以生成一个和arr相同大小的数组,然后首先通过一次筛选找到大于3的元素对应索引的数组,继而在其中再次筛选,最终得到想要的结果。代码如下:

b=np.arange(len(arr))#生成和arr相同长度的数组 
c=b[arr>3]#c存放的就是arr中大于3的元素对应的索引 
#最后通过遍历c数组,选择3到100之间的值打印出来 
for i in range(len(c)): 
 if arr[c[i]]<100: 
  print c[i], 

下面看一下执行的效果:

可以看到程序将所有介于3和100之间的元素对应的索引值打了出来,如果想同时获得索引值和相应的元素,只需将上面的“print c[i]”, 替换为 “print c[i],arr[c[i]]”即可。

当然这种方法也适用于选择某个特定值对应的索引,例如我想找到所有3对应的位置,可以用print b[arr==3]即可打印出所有值为3的元素所对应的索引。其实不论怎么做,都是用到了数组进行关系运算后生成布尔数组,然后让数组中为True的地方进行显示。

当然还可以通过两次进行筛选,分别筛选出大于3的元素和小于100的元素对应的索引数组,然后两个数组做交集处理,在numpy中有一个intersect1d函数可以进行这样的运算,但是仍然麻烦。目前只能想到这些办法,不知道有哪位高手有更好的方法,欢迎大家一起交流一下。

以上这篇numpy中实现ndarray数组返回符合特定条件的索引方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python连接MySQL数据库并查找表信息

    Python连接MySQL数据库并查找表信息

    本文主要介绍了Python连接MySQL数据库并查找表信息,通过使用Python中的MySQL Connector模块,连接到MySQL服务器并执行SQL查询语句,可以获取表的结构、列信息、行数据等,感兴趣的可以了解一下
    2023-08-08
  • 分享4个方便且好用的Python自动化脚本

    分享4个方便且好用的Python自动化脚本

    自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程,直白的就是为了节省人力、时间或硬件资源,提高测试效率,这篇文章主要给大家分享介绍了3个方便且好用的Python自动化脚本,需要的朋友可以参考下
    2022-02-02
  • python算法练习之兔子产子(斐波那切数列)

    python算法练习之兔子产子(斐波那切数列)

    这篇文章主要给大家介绍python算法练习兔子产子,文章先进行问题描述及分析然后设计算法最后再得出完整程序,需要的朋友可以参考一下 文章得具体内容
    2021-10-10
  • python f-string式格式化听语音流程讲解

    python f-string式格式化听语音流程讲解

    在本篇文章中小编给大家整理的是关于python f-string式格式化听语音的相关知识点内容,有兴趣的朋友们学习下。
    2019-06-06
  • Python中常用的内置函数

    Python中常用的内置函数

    这篇文章主要介绍了Python中常用的内置函数,主要介绍内容有map()、filter()、all()、int()等更多相关函数,需要的小伙伴可以参考一下
    2022-04-04
  • python调用api实例讲解

    python调用api实例讲解

    在本篇内容里小编给大家分享的是一篇关于python调用api实例讲解内容,有兴趣的朋友们可以参考下。
    2021-04-04
  • 对django layer弹窗组件的使用详解

    对django layer弹窗组件的使用详解

    今天小编就为大家分享一篇对django layer弹窗组件的使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • pycharm如何使用anaconda中的各种包(操作步骤)

    pycharm如何使用anaconda中的各种包(操作步骤)

    这篇文章主要介绍了pycharm如何使用anaconda中的各种包,本文通过操作步骤给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • jupyter notebook如何导出pdf并支持中文

    jupyter notebook如何导出pdf并支持中文

    这篇文章主要介绍了jupyter notebook如何导出pdf并支持中文问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • Python之random.sample()和numpy.random.choice()的优缺点说明

    Python之random.sample()和numpy.random.choice()的优缺点说明

    这篇文章主要介绍了Python之random.sample()和numpy.random.choice()的优缺点说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06

最新评论