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实现telnet客户端的方法
Apr 15 Python
Python3里的super()和__class__使用介绍
Apr 23 Python
python 爬虫出现403禁止访问错误详解
Mar 11 Python
Django验证码的生成与使用示例
May 20 Python
解决Linux系统中python matplotlib画图的中文显示问题
Jun 15 Python
Python视频爬虫实现下载头条视频功能示例
May 07 Python
Python+OpenCV图片局部区域像素值处理改进版详解
Jan 23 Python
Python使用pyautocad+openpyxl处理cad文件示例
Jul 11 Python
Python Django中间件,中间件函数,全局异常处理操作示例
Nov 08 Python
利用pandas向一个csv文件追加写入数据的实现示例
Apr 23 Python
基于python实现判断字符串是否数字算法
Jul 10 Python
获取CSDN文章内容并转换为markdown文本的python
Sep 06 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/12/02 PHP
ThinkPHP中处理表单中的注意事项
2014/11/22 PHP
Laravel Eloquent ORM 多条件查询的例子
2019/10/10 PHP
javascript实现简单的Map示例介绍
2013/12/23 Javascript
用jquery写的一个万年历(自写)
2014/01/20 Javascript
jquery实现checkbox 全选/全不选的通用写法
2014/02/22 Javascript
jQuery插件Elastislide实现响应式的焦点图无缝滚动切换特效
2015/04/12 Javascript
JavaScript实现鼠标滑过图片变换效果的方法
2015/04/16 Javascript
D3.js中data(), enter() 和 exit()的问题详解
2015/08/17 Javascript
Labelauty?jQuery单选框/复选框美化插件分享
2015/09/26 Javascript
Bootstrap自动适应PC、平板、手机的Bootstrap栅格系统
2016/05/27 Javascript
AngularJS入门教程之服务(Service)
2016/07/27 Javascript
JS代码实现百度地图 画圆 删除标注
2016/10/12 Javascript
利用Angularjs中模块ui-route管理状态的方法
2016/12/27 Javascript
在vue中使用SockJS实现webSocket通信的过程
2018/08/29 Javascript
jQuery无冲突模式详解
2019/01/17 jQuery
微信小程序跨页面数据传递事件响应实现过程解析
2019/12/19 Javascript
Vue实现PC端靠边悬浮球的代码
2020/05/09 Javascript
在Django中使用Sitemap的方法讲解
2015/07/22 Python
python中enumerate函数遍历元素用法分析
2016/03/11 Python
django静态文件加载的方法
2018/05/20 Python
Python按钮的响应事件详解
2019/03/04 Python
django admin后台添加导出excel功能示例代码
2019/05/15 Python
Python迭代器模块itertools使用原理解析
2019/12/11 Python
python绘制分布折线图的示例
2020/09/24 Python
Python 的 f-string 可以连接字符串与数字的原因解析
2021/02/20 Python
借助HTML5 Canvas API制作一个简单的猜字游戏
2016/03/25 HTML / CSS
大学生入党思想汇报
2014/01/01 职场文书
自动化职业生涯规划书范文
2014/01/03 职场文书
宿舍违规用电检讨书
2014/02/16 职场文书
学术会议主持词
2014/03/17 职场文书
出纳工作检讨书范文
2014/12/27 职场文书
傲慢与偏见读书笔记
2015/06/29 职场文书
MySQL为数据表建立索引的原则详解
2022/03/03 MySQL
Python实现Hash算法
2022/03/18 Python
古见同学有交流障碍症 第二季宣传CM公开播出
2022/04/11 日漫