查看: 2306|回复: 0

numpy 中的ndarray数组返回符合特定条件的索引方法

[复制链接]

166

主题

616

帖子

1万

积分

xdtech

Rank: 5Rank: 5

积分
11590
发表于 2019-2-27 23:12:57 | 显示全部楼层 |阅读模式
在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对应的索引位置的元组,如下图:




可以看到在索引为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]<100:
        print c


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表