在Julia中,如何获取排序数组中第一个超过特定值的元素的索引?

5
这是我的代码(x 是已排序数组):
lookup_value = 310.0
x = [298.0, 303.0, 308.0, 313.0, 323.0]
if (issorted(x))
    idx = searchsorted(x, lookup_value)
end

在这种情况下,idx的值为:
4:3

在这里,我想提取“4”(第一个超过我的查找值的元素)或“3”(最后一个不超过查找值的元素)。然而,我无法通过将范围转换为数组来实现此目的,因为以下命令给出的结果是一个空数组:

julia> collect(idx)
0-element Array{Int64,1}

请注意,310.0的查找值仅为示例;此变量可以取不同的值。


5
如果数组已排序,请改用 searchsortedfirst - spencerlyon2
2个回答

6
我刚刚意识到可以使用idx.startidx.stop来访问范围的起始和结束。
julia> idx
4:3
julia> idx.start
4
julia> idx.stop
3

超过查找值的第一个元素是x [idx.start] 。 最后一个不超过查找值的元素是x [idx.stop]


3
另外,first(idx)last(idx)也可以使用。它们略微更加通用,但在这里并不重要。 - Fengyang Wang

1
这是对被接受答案的回应。我原本想把它作为评论添加,但显然我不能这样做:
你绝对不应该使用 idx.start 和 idx.stop。在Julia中,类型字段名通常被认为是实现细节而不是接口的一部分。它们可以在没有警告或弃用的情况下更改。
你应该像Fengyang Wang建议的那样使用 first(idx) 和 last(idx)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接