Julia 朱莉娅语言:findInterval

Julia 朱莉娅语言:findInterval,julia,Julia,问题:我希望在R中找到一个类似findInterval的函数,它为输入提供标量和表示区间起点的向量,并返回标量所处区间的索引。例如,在R中: findInterval(x = 2.6, vec = c(1.1,2.1,3.1,4.1)) #[1] 2 在Julia中,有人给出了一个函数来实现这个功能(见下一节)。显然,基本的indexin函数完成了这项任务。我想知道如何获得indexin函数(或另一个基本函数)来实现这一点。我知道Julia循环很快,我可以编写一个函数,但如果有内置函数,我宁愿

问题:我希望在R中找到一个类似findInterval的函数,它为输入提供标量和表示区间起点的向量,并返回标量所处区间的索引。例如,在R中:

findInterval(x = 2.6, vec = c(1.1,2.1,3.1,4.1))
#[1] 2
在Julia中,有人给出了一个函数来实现这个功能(见下一节)。显然,基本的
indexin
函数完成了这项任务。我想知道如何获得
indexin
函数(或另一个基本函数)来实现这一点。我知道Julia循环很快,我可以编写一个函数,但如果有内置函数,我宁愿不这样做,这应该是一个常见的问题

当我使用上面R中使用的相同数字尝试
indexin
函数时,我得到:

indexin([2.6], [1.1 2.1 3.1 4.1])
# 1-element Array{Int64,1}:
# 0
这仅仅表明2.6不在向量中,因为它(据我所知)希望匹配值,而不是在区间中放置一个定标器

来自上述引用链接的函数(带有我对输入\输出数据类型的更改)

SO的相关问题:SO上的其他问题查找输入值和向量之间精确匹配的索引:


如果您的输入向量总是被排序,那么
searchsortedlast
将执行您想要的操作,例如

vec = [1.1, 2.1, 3.1, 4.1]
x = 2.6
searchsortedlast(vec, x)
但是,请注意,
searchsortedlast
将返回
0
如果
x
,并将返回
length(vec)
如果
x>vec[end]
。因此,您可能希望编写自己的自定义行为来检查这些结果,例如,如果您希望始终返回
0
如果
x
不在
vec
中的任何间隔内,您可以编写:

function find_interval(vec, x)
    i = searchsortedlast(vec, x)
    i == length(vec) && (i = 0)
    return(i)
 end

另外,如果您经常使用排序向量,您可能会对我在Julia中为排序向量编写的包感兴趣,但从未考虑过添加到
元数据中。
sortedVector
包的来源是

你想在这里得到答案吗?或者,您打算用
findInterval
定义作为答案吗?如果是这样的话,如果你把它从问题部分删除,并把它作为你自己问题的答案发布,那就更清楚了。这没关系!甚至鼓励!嗨,Matt,我想知道如何用一个基Julia函数来实现findInterval函数。基于上面的链接,应该有一种方法可以做到这一点,而不必编写自定义函数。如果您的输入向量总是被排序,那么
searchsortedlast
将执行您想要的操作,尽管您可能希望将其包装在您自己的函数中,以检查返回的
0
长度(vec)
并在输入
x
小于(或大于)vec
中的每个元素时执行您想要的任何行为。您好,谢谢@ColinTBowers。这很有效<代码>searchsortedlast([1.1,2.1,3.1,4.1],2.6)
完成了这项工作。没有问题。我会把它变成一个答案。
vec = [1.1, 2.1, 3.1, 4.1]
x = 2.6
searchsortedlast(vec, x)
function find_interval(vec, x)
    i = searchsortedlast(vec, x)
    i == length(vec) && (i = 0)
    return(i)
 end