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中mechanize库的简单使用示例
Jan 10 Python
Python模块包中__init__.py文件功能分析
Jun 14 Python
Python连接PostgreSQL数据库的方法
Nov 28 Python
解决pycharm回车之后不能换行或不能缩进的问题
Jan 16 Python
对PyQt5基本窗口控件 QMainWindow的使用详解
Jun 19 Python
python处理大日志文件
Jul 23 Python
关于sys.stdout和print的区别详解
Dec 05 Python
Python continue语句实例用法
Feb 06 Python
解析pip安装第三方库但PyCharm中却无法识别的问题及PyCharm安装第三方库的方法教程
Mar 10 Python
Django 多对多字段的更新和插入数据实例
Mar 31 Python
如何用Python 加密文件
Sep 10 Python
python 实现围棋游戏(纯tkinter gui)
Nov 13 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递归实现无限分类生成下拉列表的函数
2010/08/08 PHP
php正则表达式使用的详细介绍
2013/04/27 PHP
php实现简单加入购物车功能
2017/03/07 PHP
Centos7 Yum安装PHP7.2流程教程详解
2019/07/02 PHP
javascript基本语法分析说明
2008/06/15 Javascript
JavaScript 基于原型的对象(创建、调用)
2009/10/16 Javascript
JS小游戏之象棋暗棋源码详解
2014/09/25 Javascript
js简单实现标签云效果实例
2015/08/06 Javascript
学习javascript的闭包,原型,和匿名函数之旅
2015/10/18 Javascript
浅谈jquery的map()和each()方法
2016/06/12 Javascript
AngularJS基础 ng-non-bindable 指令详细介绍
2016/08/02 Javascript
深入理解jQuery()方法的构建原理
2016/12/05 Javascript
Node.js利用Net模块实现多人命令行聊天室的方法
2016/12/23 Javascript
微信小程序button组件使用详解
2018/01/31 Javascript
浅谈在react中如何实现扫码枪输入
2018/07/04 Javascript
JS实现的Object数组去重功能示例【数组成员为Object对象】
2019/02/01 Javascript
JavaScript运行机制实例分析
2020/04/11 Javascript
python进阶教程之词典、字典、dict
2014/08/29 Python
python中import reload __import__的区别详解
2017/10/16 Python
详解python多线程、锁、event事件机制的简单使用
2018/04/27 Python
python操作excel的方法(xlsxwriter包的使用)
2018/06/11 Python
Python实现求解一元二次方程的方法示例
2018/06/20 Python
Opencv实现抠图背景图替换功能
2019/05/21 Python
在vscode中配置python环境过程解析
2019/09/28 Python
HTML5、Select下拉框右边加图标的实现代码(增进用户体验)
2017/10/16 HTML / CSS
HTML5视频播放插件 video.js介绍
2018/09/29 HTML / CSS
英国玛莎百货澳大利亚:Marks & Spencer Australia
2019/08/30 全球购物
大学生毕业自我评价范文分享
2013/11/11 职场文书
报考公务员诚信承诺书
2014/08/29 职场文书
2014党员学习兰辉先进事迹思想汇报
2014/09/17 职场文书
2014入党积极分子批评与自我批评思想报告
2014/10/06 职场文书
七年级上册语文教学计划
2015/01/22 职场文书
医院合作意向书范本
2015/05/08 职场文书
Python如何把不同类型数据的json序列化
2021/04/30 Python
Python中如何处理常见报错
2022/01/18 Python
python 单机五子棋对战游戏
2022/04/28 Python