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 17 Python
python在windows下实现ping操作并接收返回信息的方法
Mar 20 Python
在Python的Flask框架下使用sqlalchemy库的简单教程
Apr 09 Python
python简单实现刷新智联简历
Mar 30 Python
python中实现延时回调普通函数示例代码
Sep 08 Python
Python使用Django实现博客系统完整版
Sep 29 Python
可能是最全面的 Python 字符串拼接总结【收藏】
Jul 09 Python
判断python对象是否可调用的三种方式及其区别详解
Jan 31 Python
Python求两点之间的直线距离(2种实现方法)
Jul 07 Python
django多种支付、并发订单处理实例代码
Dec 13 Python
pytorch三层全连接层实现手写字母识别方式
Jan 14 Python
python同时遍历两个list用法说明
May 02 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
修改Zend引擎实现PHP源码加密的原理及实践
2008/04/14 PHP
PHP 图片文件上传实现代码
2010/12/29 PHP
用php制作简单分页(从数据库读取记录)的方法详解
2013/05/04 PHP
使用php将某个目录下面的所有文件罗列出来的方法详解
2013/06/21 PHP
Yii框架调试心得--在页面输出执行sql语句
2014/12/25 PHP
PHP简单获取及判断提交来源的方法
2016/04/22 PHP
基于ThinkPHP5.0实现图片上传插件
2017/09/25 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
Javascript技术技巧大全(五)
2007/01/22 Javascript
在JavaScript中通过URL传递汉字的方法
2007/04/09 Javascript
javascript 写类方式之八
2009/07/05 Javascript
javascript中String类的subString()方法和slice()方法
2011/05/24 Javascript
Javascript数组操作函数总结
2015/02/05 Javascript
浅析Node.js的Stream模块中的Readable对象
2015/07/29 Javascript
javascript实现数组内值索引随机化及创建随机数组的方法
2015/08/10 Javascript
浅谈vuex之mutation和action的基本使用
2017/08/29 Javascript
AjaxUpLoad.js实现文件上传功能
2018/03/02 Javascript
JavaScript之解构赋值的理解
2019/01/30 Javascript
微信小程序开发技巧汇总
2019/07/15 Javascript
Python 文件读写操作实例详解
2014/03/12 Python
python批量提取word内信息
2015/08/09 Python
python opencv 读取本地视频文件 修改ffmpeg的方法
2019/01/26 Python
Python实现九宫格式的朋友圈功能内附“马云”朋友圈
2019/05/07 Python
如何爬取通过ajax加载数据的网站
2019/08/15 Python
python enumerate内置函数用法总结
2020/01/07 Python
详解CSS3中使用gradient实现渐变效果的方法
2015/08/18 HTML / CSS
随机分配座位,共50个学生,使学号相邻的同学座位不能相邻
2014/01/18 面试题
学年自我鉴定范文
2013/10/01 职场文书
自主招生教师推荐信
2014/05/10 职场文书
护士工作失误检讨书
2014/09/14 职场文书
2014年有孩子的离婚协议书范本
2014/10/08 职场文书
2014年采购部工作总结
2014/11/20 职场文书
优秀党员先进事迹材料
2014/12/18 职场文书
地道战观后感2000字
2015/06/04 职场文书
工作态度怎么写
2015/06/25 职场文书
Win11显卡控制面板打开显卡设置方法
2022/04/20 数码科技