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