Actually the best thing would be if I could call a function with the

dist(point_1::AbstractVector{T}, point_2::AbstractVector{T})

signature because then I could just use all the stuff in the Distances.jl 
package


On Monday, February 16, 2015 at 2:05:17 PM UTC+1, Kristoffer Carlsson wrote:
>
> I am writing some code where I sometimes want to calculate the distance 
> between two vectors and sometimes the distance between a column in a matrix 
> and another vector.
>
> This is in a very hot spot of my program so any unnecessary copying is 
> unacceptable.
>
> What I am currently doing is basically having two versions of the distance 
> function, one for vector-vector and one for column-vector:
>
> # Reduced euclidian distances
>
> # Vector-Vector
> @inline function euclidean_distance_red{T <: FloatingPoint}(point_1::
> AbstractVector{T},
>                                                             point_2::
> AbstractVector{T})
>     dist = 0.0
>     for i = 1:length(point_1)
>         @inbounds dist += abs2(point_1[i] - point_2[i])
>     end
>     return dist
> end
>
> # Column-Vector
> @inline function euclidean_distance_red{T <: FloatingPoint}(data::
> AbstractMatrix{T},
>                                                             point::
> AbstractVector{T},
>                                                             idx::Int)
>     dist = 0.0
>     for i = 1:length(point)
>         @inbounds dist += abs2(data[i, idx] - point[i])
>     end
>     return dist
> end
>
>
> This feels unnecessary since the transformation from the second to the 
> first function is obvious. Is there anyway I can collapse these two 
> functions into one that will come with zero performance loss?
>
> Best regards,
> Kristoffer Carlsson
>

Reply via email to