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、Javascript中的闭包比较
Feb 04 Python
python用reduce和map把字符串转为数字的方法
Dec 19 Python
python3中dict(字典)的使用方法示例
Mar 22 Python
Python使用PIL模块生成随机验证码
Nov 21 Python
python实现对指定字符串补足固定长度倍数截断输出的方法
Nov 15 Python
python检测IP地址变化并触发事件
Dec 26 Python
python实现本地批量ping多个IP的方法示例
Aug 07 Python
Python测试模块doctest使用解析
Aug 10 Python
Python 等分切分数据及规则命名的实例代码
Aug 16 Python
django 解决自定义序列化返回处理数据为null的问题
May 20 Python
Python更改pip镜像源的方法示例
Dec 01 Python
python通过opencv调用摄像头操作实例分析
Jun 07 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
5.PHP的其他功能
2006/10/09 PHP
MySql 按时间段查询数据方法(实例说明)
2008/11/02 PHP
Zend Studio for Eclipse的java.lang.NullPointerException错误的解决方法
2008/12/06 PHP
php生成静态文件的多种方法分享
2012/07/17 PHP
php下载excel无法打开的解决方法
2013/12/24 PHP
Jquery跨域获得Json时invalid label错误的解决办法
2011/01/11 Javascript
基于jquery的动态创建表格的插件
2011/04/05 Javascript
图片轮换效果实现代码(点击按钮停止执行)
2013/04/12 Javascript
js点击出现悬浮窗效果不使用JQuery插件
2014/01/20 Javascript
JavaScript数组对象实现增加一个返回随机元素的方法
2015/07/27 Javascript
js实现tab切换效果实例
2015/09/16 Javascript
JavaScript+html5 canvas绘制的小人效果
2016/01/27 Javascript
BootStrap智能表单实战系列(三)分块表单配置详解
2016/06/13 Javascript
AngularJS基础 ng-class-odd 指令示例
2016/08/01 Javascript
js实现精确到毫秒的倒计时效果
2016/08/05 Javascript
vue省市区三联动下拉选择组件的实现
2017/04/28 Javascript
Vue指令v-for遍历输出JavaScript数组及json对象的常见方式小结
2019/02/11 Javascript
JS操作字符串转数字的常见方法示例
2019/10/29 Javascript
vue v-for直接循环数字实例
2019/11/07 Javascript
[35:26]DOTA2上海特级锦标赛B组小组赛#2 VG VS Fnatic第三局
2016/02/26 DOTA
[44:43]完美世界DOTA2联赛决赛日 FTD vs GXR 第一场 11.08
2020/11/11 DOTA
python实现DES加密解密方法实例详解
2015/06/30 Python
浅谈Python基础之I/O模型
2017/05/11 Python
使用python 3实现发送邮件功能
2018/06/15 Python
python中嵌套函数的实操步骤
2019/02/27 Python
python3人脸识别的两种方法
2019/04/25 Python
基于Python中isfile函数和isdir函数使用详解
2019/11/29 Python
200行python代码实现贪吃蛇游戏
2020/04/24 Python
纯CSS3绘制打火机动画火焰效果
2016/07/18 HTML / CSS
瑞典廉价机票预订网站:Seat24
2018/06/19 全球购物
统计每一学生的平均成绩
2014/06/06 面试题
中学家长会邀请函
2014/01/17 职场文书
求职信格式要求
2014/05/23 职场文书
2015年党员公开承诺书范文
2015/01/22 职场文书
暗恋桃花源观后感
2015/06/12 职场文书
利用Python+OpenCV三步去除水印
2021/05/28 Python