我有像这样的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(域名索引)? 如果没有人能够建议最好的方法(表现明智)来完成这样的任务吗?
答案 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