Numpy:find范围内的元素

例如,我有一个数字的数组,

a = [1, 3, 5, 6, 9, 10, 14, 15, 56] 

我想find特定范围内的所有元素。 例如,如果范围是(6,10),答案应该是(3,4,5)。 有没有一个内置的function来做到这一点?

您可以使用np.where来获取索引和np.logical_and来设置两个条件:

 In [27]: a = np.array([1, 3, 5, 6, 9, 10, 14, 15, 56]) In [28]: np.where(np.logical_and(a>=6, a<=10)) Out[28]: (array([3, 4, 5]),) 

正如在@ deinonychusaur的答复中,但更加紧凑:

 In [7]: np.where((a >= 6) & (a <=10)) Out[7]: (array([3, 4, 5]),) 

我想我会添加这个,因为你给的例子中的a是sorting的:

 import numpy as np a = [1, 3, 5, 6, 9, 10, 14, 15, 56] start = np.searchsorted(a, 6, 'left') end = np.searchsorted(a, 10, 'right') rng = np.arange(start, end) rng # array([3, 4, 5]) 
 a = np.array([1,2,3,4,5,6,7,8,9]) b = a[(a>2) & (a<8)] 
 s=[52, 33, 70, 39, 57, 59, 7, 2, 46, 69, 11, 74, 58, 60, 63, 43, 75, 92, 65, 19, 1, 79, 22, 38, 26, 3, 66, 88, 9, 15, 28, 44, 67, 87, 21, 49, 85, 32, 89, 77, 47, 93, 35, 12, 73, 76, 50, 45, 5, 29, 97, 94, 95, 56, 48, 71, 54, 55, 51, 23, 84, 80, 62, 30, 13, 34] dic={} for i in range(0,len(s),10): dic[i,i+10]=list(filter(lambda x:((x>=i)&(x<i+10)),s)) print(dic) for keys,values in dic.items(): print(keys) print(values) 

输出:

 (0, 10) [7, 2, 1, 3, 9, 5] (20, 30) [22, 26, 28, 21, 29, 23] (30, 40) [33, 39, 38, 32, 35, 30, 34] (10, 20) [11, 19, 15, 12, 13] (40, 50) [46, 43, 44, 49, 47, 45, 48] (60, 70) [69, 60, 63, 65, 66, 67, 62] (50, 60) [52, 57, 59, 58, 50, 56, 54, 55, 51] 
 a = np.array([1, 3, 5, 6, 9, 10, 14, 15, 56]) np.argwhere((a>=6) & (a<=10)) 

您可以使用np.clip()来实现相同的function:

 a = [1, 3, 5, 6, 9, 10, 14, 15, 56] np.clip(a,6,10) 

但是,它分别保持小于和大于6和10的值。

这个代码片断返回两个值之间的numpy数组中的所有数字:

 a = np.array([1, 3, 5, 6, 9, 10, 14, 15, 56] ) a[(a>6)*(a<10)] 

它的工作原理如下:(a> 6)用True(1)和False(0)返回一个numpy数组,所以(a <10)。 如果两个语句都是True(因为1×1 = 1)或False(因为0x0 = 0和1×0 = 0),所以将这两个数相乘得到一个带有True的数组。

部分a返回数组a的所有值,括号内的数组返回True语句。

当然,你可以通过举例说明这一点

 ...*(1-a<10) 

这与“和不”声明类似。