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脚本来控制Windows Azure的简单教程
Apr 16 Python
Python文件夹与文件的相关操作(推荐)
Jul 25 Python
python批量添加zabbix Screens的两个脚本分享
Jan 16 Python
Python内置函数delattr的具体用法
Nov 23 Python
python实现基于SVM手写数字识别功能
May 27 Python
python中将zip压缩包转为gz.tar的方法
Oct 18 Python
对python中Json与object转化的方法详解
Dec 31 Python
使用python实现简单五子棋游戏
Jun 18 Python
python装饰器相当于函数的调用方式
Dec 27 Python
python爬虫库scrapy简单使用实例详解
Feb 10 Python
Numpy(Pandas)删除全为零的列的方法
Sep 11 Python
python生成随机数、随机字符、随机字符串
Apr 06 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脚本代码
2011/02/19 PHP
无法载入 mcrypt 扩展,请检查 PHP 配置终极解决方案
2011/07/18 PHP
深入PHP数据缓存的使用说明
2013/05/10 PHP
探讨PHP使用eAccelerator的API开发详解
2013/06/09 PHP
PHP图片等比缩放类SimpleImage使用方法和使用实例分享
2014/04/10 PHP
Centos7.7 64位利用本地完整安装包安装lnmp/lamp套件教程
2021/03/09 Servers
Mac OS X 系统下安装和部署Egret引擎开发环境
2014/09/03 Javascript
容易造成JavaScript内存泄露几个方面
2014/09/04 Javascript
JavaScript解析json格式数据简单示例
2014/12/09 Javascript
介绍JavaScript的一个微型模版
2015/06/24 Javascript
Javascript获取background属性中url的值
2016/10/17 Javascript
Angular的自定义指令以及实例
2016/12/26 Javascript
Vue数据驱动模拟实现5
2017/01/13 Javascript
解决html input验证只能输入数字,不能输入其他的问题
2017/07/21 Javascript
Electron 如何调用本地模块的方法
2019/02/01 Javascript
微信小程序Flex布局用法深入浅出分析
2019/04/25 Javascript
详解如何搭建mpvue框架搭配vant组件库的小程序项目
2019/05/16 Javascript
vue cli3 调用百度翻译API翻译页面的实现示例
2019/09/13 Javascript
深入理解javascript prototype的相关知识
2019/09/19 Javascript
[01:06:07]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS CIS
2014/05/22 DOTA
[44:01]2018DOTA2亚洲邀请赛3月30日 小组赛B组 EG VS paiN
2018/03/31 DOTA
使用Python实现windows下的抓包与解析
2018/01/15 Python
python机器学习之随机森林(七)
2018/03/26 Python
对Python中画图时候的线类型详解
2019/07/07 Python
如何利用CSS3制作3D效果文字具体实现样式
2013/05/02 HTML / CSS
美国杰西潘尼官网:JCPenney
2019/06/12 全球购物
应届生会计求职信
2013/11/11 职场文书
高中生学习生活的自我评价
2013/11/27 职场文书
副职竞争上岗演讲稿
2014/05/12 职场文书
历史学专业求职信
2014/06/19 职场文书
青春飞扬演讲稿
2014/09/11 职场文书
入党积极分子对十八届四中全会期盼的思想汇报
2014/10/17 职场文书
经理助理岗位职责
2015/02/02 职场文书
集结号观后感
2015/06/08 职场文书
情感电台广播稿
2015/08/18 职场文书
go语言使用Casbin实现角色的权限控制
2021/06/26 Golang