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


Posted in Python onApril 17, 2018

在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对应的索引位置的元组,如下图:

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

可以看到在索引为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],

下面看一下执行的效果:

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

可以看到程序将所有介于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 相关文章推荐
Python警察与小偷的实现之一客户端与服务端通信实例
Oct 09 Python
python处理大数字的方法
May 27 Python
Python使用PDFMiner解析PDF代码实例
Mar 27 Python
Python实现随机选择元素功能
Sep 14 Python
Python爬虫番外篇之Cookie和Session详解
Dec 27 Python
python中对数据进行各种排序的方法
Jul 02 Python
超简单的Python HTTP服务
Jul 22 Python
python 利用pyttsx3文字转语音过程详解
Sep 25 Python
jupyternotebook 撤销删除的操作方式
Apr 17 Python
Python利用Pillow(PIL)库实现验证码图片的全过程
Oct 04 Python
pandas中pd.groupby()的用法详解
Jun 16 Python
利用Python实现翻译HTML中的文本字符串
Jun 21 Python
python中找出numpy array数组的最值及其索引方法
Apr 17 #Python
详谈Numpy中数组重塑、合并与拆分方法
Apr 17 #Python
基于numpy.random.randn()与rand()的区别详解
Apr 17 #Python
Python实现求解括号匹配问题的方法
Apr 17 #Python
django 通过ajax完成邮箱用户注册、激活账号的方法
Apr 17 #Python
对numpy中array和asarray的区别详解
Apr 17 #Python
django 开发忘记密码通过邮箱找回功能示例
Apr 17 #Python
You might like
PHP 数组遍历foreach语法结构及实例
2016/06/13 PHP
防止页面被iframe(兼容IE,Firefox火狐)
2010/07/04 Javascript
基于JQuery的动态删除Table表格的行和列的代码
2011/05/12 Javascript
Javascript中产生固定结果的函数优化技巧
2013/01/16 Javascript
asp.net中System.Timers.Timer的使用方法
2013/03/20 Javascript
js使用数组判断提交数据是否存在相同数据
2013/11/27 Javascript
js获取滚动距离的方法
2015/05/30 Javascript
jQuery+PHP+MySQL二级联动下拉菜单实例讲解
2015/10/27 Javascript
自己动手制作基于jQuery的Web页面加载进度条插件
2016/06/03 Javascript
Vue中在新窗口打开页面及Vue-router的使用
2018/06/13 Javascript
快速排序的算法思想及Python版快速排序的实现示例
2016/07/02 Python
利用Python中的pandas库对cdn日志进行分析详解
2017/03/07 Python
tensorflow 恢复指定层与不同层指定不同学习率的方法
2018/07/26 Python
Python pymongo模块常用操作分析
2018/09/01 Python
Python 20行简单实现有道在线翻译的详解
2019/05/15 Python
python实现微信小程序用户登录、模板推送
2019/08/28 Python
Python如何使用字符打印照片
2020/01/03 Python
K最近邻算法(KNN)---sklearn+python实现方式
2020/02/24 Python
Python 跨.py文件调用自定义函数说明
2020/06/01 Python
django和flask哪个值得研究学习
2020/07/31 Python
python爬虫分布式获取数据的实例方法
2020/11/26 Python
python爬虫beautifulsoup库使用操作教程全解(python爬虫基础入门)
2021/02/19 Python
css3如何绘制一个圆圆的loading转圈动画
2018/01/09 HTML / CSS
多视角3D逼真HTML5水波动画
2016/03/03 HTML / CSS
Hudson Jeans官网:高级精制牛仔裤
2018/11/28 全球购物
酒店个人求职信范文
2014/01/25 职场文书
2015年幼儿园毕业感言
2014/02/12 职场文书
技术总监管理岗位职责
2014/03/09 职场文书
商学院大学生求职的自我评价
2014/03/12 职场文书
幼儿园课题实施方案
2014/05/14 职场文书
学校运动会报道稿
2014/09/23 职场文书
2014年作风建设工作总结
2014/10/29 职场文书
大班下学期幼儿评语
2014/12/30 职场文书
创建文明城市倡议书
2015/04/28 职场文书
文艺晚会开场白
2015/05/29 职场文书
win10系统计算机图标怎么调出来?win10调出计算机图标的方法
2022/08/14 数码科技