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基础教程之元组操作使用详解
Mar 25 Python
Python编程实现控制cmd命令行显示颜色的方法示例
Aug 14 Python
python实现微信自动回复功能
Apr 11 Python
python实现搜索文本文件内容脚本
Jun 22 Python
使用Numpy读取CSV文件,并进行行列删除的操作方法
Jul 04 Python
在Python中将函数作为另一个函数的参数传入并调用的方法
Jan 22 Python
运用Python的webbrowser实现定时打开特定网页
Feb 21 Python
python使用Qt界面以及逻辑实现方法
Jul 10 Python
Python使用正则实现计算字符串算式
Dec 29 Python
python 中的paramiko模块简介及安装过程
Feb 29 Python
Python字典的基础操作
Nov 01 Python
Python数据处理的三个实用技巧分享
Apr 01 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(二)
2012/03/21 PHP
php下获取http状态的实现代码
2014/05/09 PHP
Thinkphp调用Image类生成缩略图的方法
2015/03/07 PHP
Laravel中unique和exists验证规则的优化详解
2018/01/28 PHP
PHP结合Redis+MySQL实现冷热数据交换应用案例详解
2019/07/09 PHP
用js小类库获取浏览器的高度和宽度信息
2012/01/15 Javascript
JS中处理与当前时间间隔的函数代码
2012/05/23 Javascript
jQuery实现首页顶部可伸缩广告特效代码
2015/04/15 Javascript
jQuery 3.0十大新特性最终版发布
2016/07/14 Javascript
类似于QQ的右滑删除效果的实现方法
2016/10/16 Javascript
JQuery实现定时刷新功能代码
2017/05/09 jQuery
Vue学习笔记进阶篇之过渡状态详解
2017/07/14 Javascript
node.JS二进制操作模块buffer对象使用方法详解
2020/02/06 Javascript
vue倒计时刷新页面不会从头开始的解决方法
2020/03/03 Javascript
[01:07:11]Secret vs Newbee 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python导出DBF文件到Excel的方法
2015/07/25 Python
Python2.x与Python3.x的区别
2016/01/14 Python
Python实现通讯录功能
2018/02/22 Python
python跳出双层for循环的解决方法
2019/06/24 Python
Pandas之Fillna填充缺失数据的方法
2019/06/25 Python
有趣的Python图片制作之如何用QQ好友头像拼接出里昂
2020/04/22 Python
Python常见反爬虫机制解决方案
2020/06/01 Python
基于Python的一个自动录入表格的小程序
2020/08/05 Python
Python os库常用操作代码汇总
2020/11/03 Python
HTML5有哪些新特征
2015/12/01 HTML / CSS
英国家喻户晓的折扣商场:TK Maxx
2017/05/26 全球购物
美国瑜伽服装和装备购物网站:Mukha Yoga
2019/02/22 全球购物
Everything But Water官网:美国泳装品牌
2019/03/17 全球购物
澳大利亚领先的女帽及配饰公司:Morgan&Taylor
2019/12/01 全球购物
应届生文秘专业个人自荐信格式
2013/09/21 职场文书
岗位职责定义及内容
2013/11/08 职场文书
《乌鸦和狐狸》教学反思
2014/02/08 职场文书
预备党员2014全国两会学习心得体会
2014/03/10 职场文书
安全生产月演讲稿
2014/05/09 职场文书
工作证明格式及范本
2014/09/12 职场文书
2014年会计个人工作总结
2014/11/24 职场文书