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实现分析apache和nginx日志文件并输出访客ip列表的方法
Apr 04 Python
python 使用get_argument获取url query参数
Apr 28 Python
在Pandas中给多层索引降级的方法
Nov 16 Python
在python中用print()输出多个格式化参数的方法
Jul 16 Python
python基于socket进行端口转发实现后门隐藏的示例
Jul 25 Python
Django实现跨域的2种方法
Jul 31 Python
用Python在Excel里画出蒙娜丽莎的方法示例
Apr 28 Python
python speech模块的使用方法
Sep 09 Python
selenium自动化测试入门实战
Dec 21 Python
python实现三种随机请求头方式
Jan 05 Python
神经网络训练采用gpu设置的方式
Mar 03 Python
Python通过loop.run_in_executor执行同步代码 同步变为异步
Apr 11 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/05/26 PHP
《PHP编程最快明白》第二讲 数字、浮点、布尔型、字符串和数组
2010/11/01 PHP
PHP把MSSQL数据导入到MYSQL的方法
2014/12/27 PHP
PHP统计当前在线用户数实例讲解
2015/10/21 PHP
php微信公众号js-sdk开发应用
2016/11/28 PHP
img标签中onerror用法
2009/08/13 Javascript
ExtJS GridPanel 根据条件改变字体颜色
2010/03/08 Javascript
jQuery探测位置的提示弹窗(toolTip box)详细解析
2013/11/14 Javascript
JS 弹出层 定位至屏幕居中示例
2014/05/21 Javascript
AngularJS入门知识之MVW类框架的编程思想探讨
2014/12/08 Javascript
js实现鼠标经过时图片滚动停止的方法
2015/02/16 Javascript
js实现类似新浪微博首页内容渐显效果的方法
2015/04/10 Javascript
jquery实现具有收缩功能的垂直导航菜单
2016/02/16 Javascript
bootstrap-wysiwyg结合ajax实现图片上传实时刷新功能
2016/05/27 Javascript
基于JavaScript实现前端文件的断点续传
2016/10/17 Javascript
JS高级技巧(简洁版)
2018/07/29 Javascript
JavaScript实现预览本地上传图片功能完整示例
2019/03/08 Javascript
vue给对象动态添加属性和值的实例
2019/09/09 Javascript
详解Vue之计算属性
2020/06/20 Javascript
python base64 decode incorrect padding错误解决方法
2015/01/08 Python
详解Django中的ifequal和ifnotequal标签使用
2015/07/16 Python
用Python实现随机森林算法的示例
2017/08/24 Python
python 获得任意路径下的文件及其根目录的方法
2019/02/16 Python
python写入数据到csv或xlsx文件的3种方法
2019/08/23 Python
python中struct模块之字节型数据的处理方法
2019/08/27 Python
使用tensorflow根据输入更改tensor shape
2020/06/23 Python
CSS Grid布局教程之网格单元格布局
2014/12/30 HTML / CSS
美国彩妆品牌:Coastal Scents
2017/04/01 全球购物
华纳兄弟工作室的官方授权商店:WB Shop
2018/11/30 全球购物
机械加工与数控专业自荐书
2014/06/04 职场文书
授权收款委托书
2014/09/23 职场文书
优秀共产党员推荐材料
2014/12/18 职场文书
党员个人总结自评
2015/02/14 职场文书
大学毕业生自我评价
2015/03/02 职场文书
党支部工作总结2015
2015/04/01 职场文书
2016教师校本培训心得体会
2016/01/08 职场文书