查找位于哪个域值

时间:2016-06-19 13:28:11

标签: python-2.7 numpy

我有像这样的numpy数组

x = [ [0,1],[1,2],[2,3],[3,4]]

numpy中是否有一个内置函数可以让我在哪个域中获取值?

如果

,域名定义为 i
    x[i,1]<= value <x[i,2]. 

例如:

np.find(3.5,x)

返回 3(域名索引)? 如果没有人能够建议最好的方法(表现明智)来完成这样的任务吗?

1 个答案:

答案 0 :(得分:2)

如果连续&#34;域的边缘值&#34;总是完全匹配(即如果x[i+i, 0] == x[i, 1]),那么你真的不需要两列 - 你可以在第二列使用np.digitize

edges = np.array([[0, 1], [1, 2], [2, 3], [3, 4]])
x = 0.5, 2.9, 3.8
idx = np.digitize(x, bins=edges[:, 1])

print(edges[idx])
# [[0 1]
#  [2 3]
#  [3 4]]

这假设edges[:, 1]中的值是单调递增的。如果它们不是,那么您可以使用np.argsort来获取将按升序排序它们的索引,然后将这些索引作为sorter=参数传递给searchsorted。超出范围的值&#34;越界&#34;会像这样处理:

print(edges[:, 1].searchsorted(-1))   # smaller than edges[0, 1]
# 0

print(edges[:, 1].searchsorted(10))   # larger than edges[-1, 1]
# 4