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字典get()方法用法分析
Apr 17 Python
python中as用法实例分析
Apr 30 Python
一百行python代码将图片转成字符画
Feb 19 Python
python中调试或排错的五种方法示例
Sep 12 Python
Python文件路径名的操作方法
Oct 30 Python
python range实例用法分享
Feb 06 Python
django 模型中的计算字段实例
May 19 Python
浅析Python 抽象工厂模式的优缺点
Jul 13 Python
Python基于正则表达式实现计算器功能
Jul 13 Python
Python调用jar包方法实现过程解析
Aug 11 Python
python使用正则表达式匹配txt特定字符串(有换行)
Dec 09 Python
Python帮你解决手机qq微信内存占用太多问题
Feb 15 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获取网页内容方法总结
2008/12/04 PHP
php面向对象全攻略 (五) 封装性
2009/09/30 PHP
基于PHP选项与信息函数的使用详解
2013/05/10 PHP
PHP运行SVN命令显示某用户的文件更新记录的代码
2014/01/03 PHP
PHP中的output_buffering详细介绍
2014/09/27 PHP
php实现检查文章是否被百度收录
2015/01/27 PHP
Laravel 5框架学习之Eloquent (laravel 的ORM)
2015/04/08 PHP
微信支付PHP SDK ―― 公众号支付代码详解
2016/09/13 PHP
Yii2实现log输出到file及database的方法
2016/11/12 PHP
PHP使用redis消息队列发布微博的方法示例
2017/06/22 PHP
使用js dom和jquery分别实现简单增删改
2014/09/11 Javascript
jQuery操作DOM之获取表单控件的值
2015/01/23 Javascript
14款经典网页图片和文字特效的jQuery插件-前端开发必备
2015/08/25 Javascript
原生JavaScript来实现对dom元素class的操作方法(推荐)
2017/08/16 Javascript
详解node服务器中打开html文件的两种方法
2017/09/18 Javascript
微信小程序异步处理详解
2017/11/10 Javascript
微信小程序scroll-view点击项自动居中效果的实现
2020/03/25 Javascript
vue-video-player视频播放器使用配置详解
2020/10/23 Javascript
nuxt.js添加环境变量,区分项目打包环境操作
2020/11/06 Javascript
vue打开新窗口并实现传参的图文实例
2021/03/04 Vue.js
python生成器,可迭代对象,迭代器区别和联系
2018/02/04 Python
python 实现调用子文件下的模块方法
2018/12/07 Python
python3读取图片并灰度化图片的四种方法(OpenCV、PIL.Image、TensorFlow方法)总结
2019/07/04 Python
基于python 微信小程序之获取已存在模板消息列表
2019/08/05 Python
python爬虫使用scrapy注意事项
2020/11/23 Python
通用的Django注册功能模块实现方法
2021/02/05 Python
HTML5 对各个标签的定义与规定:body的介绍
2012/06/21 HTML / CSS
HTML5 自动聚焦(autofocus)属性使用介绍
2013/08/07 HTML / CSS
HTML 5 input placeholder 属性如何完美兼任ie
2014/05/12 HTML / CSS
在线购买澳大利亚设计师手拿包和奢华晚装手袋:Olga Berg
2019/03/20 全球购物
C语言编程题
2015/03/09 面试题
拾金不昧表扬稿大全
2015/05/05 职场文书
环境卫生标语
2015/08/03 职场文书
初中数学教学反思范文
2016/02/17 职场文书
Python实现DBSCAN聚类算法并样例测试
2021/06/22 Python
python Tkinter模块使用方法详解
2022/04/07 Python