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 相关文章推荐
Python3实现连接SQLite数据库的方法
Aug 23 Python
理解Python中的With语句
Feb 02 Python
简单谈谈python的反射机制
Jun 28 Python
Python+微信接口实现运维报警
Aug 27 Python
利用Python实现网络测试的脚本分享
May 26 Python
Appium Python自动化测试之环境搭建的步骤
Jan 23 Python
VSCode中自动为Python文件添加头部注释
Nov 14 Python
Python Tornado批量上传图片并显示功能
Mar 26 Python
Python3操作YAML文件格式方法解析
Apr 10 Python
python中字符串的编码与解码详析
Dec 03 Python
Python 内置函数速查表一览
Jun 02 Python
Python列表的索引与切片
Apr 07 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/02/08 PHP
使用cookie实现统计访问者登陆次数
2013/06/08 PHP
php随机抽奖实例分析
2015/03/04 PHP
php判断文件夹是否存在不存在则创建
2015/04/09 PHP
php变量与字符串的增删改查操作示例
2020/05/07 PHP
PHPStorm 2020.1 调试 Nodejs的多种方法详解
2020/09/17 NodeJs
JQuery设置获取下拉菜单某个选项的值(比较全)
2014/08/05 Javascript
JavaScript的arguments对象应用示例
2014/09/15 Javascript
使用不同的方法结合/合并两个JS数组
2014/09/18 Javascript
浅析javascript中的DOM
2015/03/01 Javascript
javascript 继承学习心得总结
2016/03/17 Javascript
JS加载iFrame出现空白问题的解决办法
2016/05/13 Javascript
Bootstrap响应式侧边栏改进版
2016/09/17 Javascript
jquery实时获取时间的简单实例
2017/01/26 Javascript
vue-router跳转页面的方法
2017/02/09 Javascript
JavaScript实现两个select下拉框选项左移右移
2017/03/09 Javascript
图片懒加载imgLazyLoading.js使用详解
2020/09/15 Javascript
Vue面试题及Vue知识点整理
2018/10/07 Javascript
layui 数据表格复选框实现单选功能的例子
2019/09/19 Javascript
浅析Vue 中的 render 函数
2020/02/28 Javascript
Python3实现将文件树中所有文件和子目录归档到tar压缩文件的方法
2015/05/22 Python
pandas全表查询定位某个值所在行列的方法
2018/04/12 Python
APIStar:一个专为Python3设计的API框架
2018/09/26 Python
Python异常的检测和处理方法
2018/10/26 Python
python接口自动化(十七)--Json 数据处理---一次爬坑记(详解)
2019/04/18 Python
Python字符串格式化f-string多种功能实现
2020/05/07 Python
html5 web本地存储将取代我们的cookie
2012/12/26 HTML / CSS
澳大利亚当地社区首选的光学商店:1001 Optical
2019/08/24 全球购物
物流创业计划书
2014/02/01 职场文书
成人继续教育实施方案
2014/03/01 职场文书
2014高考励志标语
2014/06/05 职场文书
电子信息工程专业自荐书
2014/06/24 职场文书
机动车登记业务委托书
2014/10/08 职场文书
个人查摆剖析材料
2014/10/16 职场文书
社区四风存在问题及整改措施
2014/10/26 职场文书
Python+pyaudio实现音频控制示例详解
2022/07/23 Python