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通过websocket与js客户端通信示例分析
Jun 25 Python
Python中正则表达式详解
May 17 Python
Python字符串格式化%s%d%f详解
Feb 02 Python
python使用生成器实现可迭代对象
Mar 20 Python
python3使用SMTP发送简单文本邮件
Jun 19 Python
解决pycharm安装后代码区不能编辑的问题
Oct 28 Python
Linux上使用Python统计每天的键盘输入次数
Apr 17 Python
Django缓存系统实现过程解析
Aug 02 Python
如何让PyQt5中QWebEngineView与JavaScript交互
Oct 21 Python
解决Tkinter中button按钮未按却主动执行command函数的问题
May 23 Python
Python使用OpenCV和K-Means聚类对毕业照进行图像分割
Jun 11 Python
Golang Web 框架Iris安装部署
Aug 14 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
经典的PHPer为什么被认为是草根?
2007/04/02 PHP
php htmlspecialchars()与shtmlspecialchars()函数的深入分析
2013/06/05 PHP
php中smarty实现多模版网站的方法
2015/06/11 PHP
在WordPress中安装使用视频播放器插件Hana Flv Player
2016/01/04 PHP
php日期操作技巧小结
2016/06/25 PHP
浅析PHP数据导出知识点
2018/02/17 PHP
在Javascript中为String对象添加trim,ltrim,rtrim方法
2006/09/22 Javascript
JavaScript Cookie的读取和写入函数
2009/12/08 Javascript
javascript cookies操作集合
2010/04/12 Javascript
js和html5实现手机端刮刮卡抽奖效果完美兼容android/IOS
2013/11/18 Javascript
jQuery的3种请求方式$.post,$.get,$.getJSON
2014/03/28 Javascript
javaScript使用EL表达式的几种方式
2014/05/27 Javascript
调试JavaScript中正则表达式中遇到的问题
2015/01/27 Javascript
jQuery选择器之属性过滤选择器详解
2017/09/28 jQuery
JS中使用textPath实现线条上的文字
2017/12/25 Javascript
多页vue应用的单页面打包方法(内含打包模式的应用)
2020/06/11 Javascript
Python 除法小技巧
2008/09/06 Python
python 正则式使用心得
2009/05/07 Python
python encode和decode的妙用
2009/09/02 Python
Python 模拟购物车的实例讲解
2017/09/11 Python
python机器学习理论与实战(一)K近邻法
2021/01/28 Python
Python 批量刷博客园访问量脚本过程解析
2019/08/30 Python
python中数据库like模糊查询方式
2020/03/02 Python
Python实现Excel自动分组合并单元格
2021/02/22 Python
HOTEL INFO英国:搜索全球酒店
2019/08/08 全球购物
智能钱包:Ekster
2019/11/21 全球购物
门卫班长岗位职责
2013/12/15 职场文书
个人优缺点自我评价
2014/01/27 职场文书
教师学习培训邀请函
2014/02/04 职场文书
《逃家小兔》教学反思
2014/02/23 职场文书
小学生作文评语
2014/04/18 职场文书
违反交通安全法检讨书
2014/10/24 职场文书
党员群众路线整改措施及今后努力方向
2014/10/28 职场文书
群众路线教育实践活动学习笔记
2014/11/05 职场文书
2014年财务工作总结范文
2014/11/11 职场文书
Windows下用Nginx配置https服务器及反向代理的问题
2021/09/25 Servers