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进程的信号通讯
Apr 09 Python
Python实现批量更换指定目录下文件扩展名的方法
Sep 19 Python
Python标准库sched模块使用指南
Jul 06 Python
python实现k-means聚类算法
Feb 23 Python
对python中的高效迭代器函数详解
Oct 18 Python
Python中使用pypdf2合并、分割、加密pdf文件的代码详解
May 21 Python
爬虫代理池Python3WebSpider源代码测试过程解析
Dec 20 Python
详解Django配置JWT认证方式
May 09 Python
用于ETL的Python数据转换工具详解
Jul 21 Python
Python爬虫自动化爬取b站实时弹幕实例方法
Jan 26 Python
基于Pygame实现简单的贪吃蛇游戏
Dec 06 Python
基于Python实现流星雨效果的绘制
Mar 18 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/05/24 PHP
基于initPHP的框架介绍
2013/04/18 PHP
destoon二次开发常用数据库操作
2014/06/21 PHP
php获取文件类型和文件信息的方法
2015/07/10 PHP
PHP Mysqli 常用代码集合
2016/11/12 PHP
php PDO判断连接是否可用的实现方法
2017/04/03 PHP
PHP Swoole异步读取、写入文件操作示例
2019/10/24 PHP
PHP程序员简单的开展服务治理架构操作详解(三)
2020/05/14 PHP
javascript当onmousedown、onmouseup、onclick同时应用于同一个标签节点Element
2010/01/05 Javascript
10款新鲜出炉的 jQuery 插件(Ajax 插件,有幻灯片、图片画廊、菜单等)
2011/06/08 Javascript
50款非常棒的 jQuery 插件分享
2012/03/29 Javascript
jQuery之日期选择器的深入解析
2013/06/19 Javascript
使用JS实现图片展示瀑布流效果(简单实例)
2016/09/06 Javascript
AngularJS 单元测试(一)详解
2016/09/21 Javascript
React服务端渲染(总结)
2017/07/01 Javascript
vue 图片裁剪上传组件的实现
2020/11/12 Javascript
[37:50]VP vs TNC Supermajor小组赛B组 BO3 第一场 6.2
2018/06/03 DOTA
在Python中处理时间之clock()方法的使用
2015/05/22 Python
python实现解数独程序代码
2017/04/12 Python
opencv python 2D直方图的示例代码
2018/07/20 Python
Django在pycharm下修改默认启动端口的方法
2019/07/26 Python
Python字符串函数strip()原理及用法详解
2020/07/23 Python
关于python3.9安装wordcloud出错的问题及解决办法
2020/11/02 Python
Python3中对json格式数据的分析处理
2021/01/28 Python
adidas美国官网:adidas US
2016/09/21 全球购物
Nike俄罗斯官方网站:Nike RU
2021/03/05 全球购物
教你打造完美的创业计划书
2014/01/06 职场文书
经销商会议欢迎词
2014/01/11 职场文书
领导视察欢迎词
2014/01/15 职场文书
银行员工辞职信范文
2014/01/20 职场文书
三字经教学反思
2014/04/26 职场文书
法院干警四风问题自我剖析材料
2014/09/29 职场文书
2015年高校教师个人工作总结
2015/05/25 职场文书
单位综合评价意见
2015/06/05 职场文书
浅析MySQL如何实现事务隔离
2021/06/26 MySQL
使用javascript解析二维码的三种方式
2021/11/11 Javascript