If your array is sorted, as your example suggests, there maybe faster
methods, binary search comes to mind (implemented in searchsorted).
Also, if the array is unsorted but you need to look up many values, it
might be worth sorting it first.  Mauro

On Sun, 2016-04-10 at 13:40, Fred <[email protected]> wrote:
> Hi,
>
> I am looking for the most efficient (fastest) way to find the indice of the
> element with the nearest value of a float in an array.
>
> x = [1:0.1:10]
>
> julia> x
> 91-element Array{Float64,1}:
>  1.0
>  1.1
>  1.2
>  1.3
>  1.4
>  ⋮
>  9.4
>  9.5
>  9.6
>  9.7
>  9.8
>  9.9
> 10.0
>
> It is very easy to find the indice of an exact value of x, for example 8.2
>
> julia> find(x .== 8.2)
> 1-element Array{Int64,1}:
> 73
>
> But if I want the indice of the closest value of 8.22
>
> julia> minimum(abs(x-8.22))
> 0.02000000000000135
>
> julia> find(x .== minimum(abs(x-8.22)))
> 0-element Array{Int64,1}
>
>
> Of course it is easy to do that with a loop but is it the fastest solution ?
>
> min_i = 0
> min_x = 1.0
>
> for i=[1:length(x)]
>    e = abs(collect(x)[i] - 8.22)
>    if e < min_x
>      min_x = e
>      min_i = i
>    end
> end
>
> println(min_x, " -> ", min_i)
> 0.02000000000000135 -> 73
>
>
> Thanks for your comments !

Reply via email to