Что представляет собой простой способ найти евклидово расстояние между двумя n-мерными векторами в Юлии?Евклидово расстояние между двумя n-мерными векторами
7
A
ответ
12
Вот простой способ
n = 10
x = rand(n)
y = rand(n)
d = norm(x-y) # The euclidean (L2) distance
Для Manhattan/таксомотора/L1 расстояние, используйте norm(x-y,1)
11
Это легко сделать благодаря прекрасной Distances упаковке:
Pkg.add("Distances") #if you don't have it
Using Distances
one7d = rand(7)
two7d = rand(7)
dist = euclidean(one7d,two7d)
Кроме того, если у вас есть сказать, 2 матрицы 9D векторов Col, вы можете получить расстояние между каждой соответствующей пары с помощью colwise:
thousand9d1 = rand(9,1000)
thousand9d2 = rand(9,1000)
dists = colwise(Euclidean(), thousand9d1, thousand9d2)
#returns: 1000-element Array{Float64,1}
Вы также можете сравнить один вектор, например происхождение (если вы хотите величину каждого вектора-столбца)
origin9 = zeros(9)
mags = colwise(Euclidean(), thousand9ds1, origin9)
#returns: 1000-element Array{Float64,1}
Другие расстояния также доступны:
- Squared евклидовой
- Cityblock
- Чебышева
- Минковский
- Хэмминга
- Косинус
- Корреляция
- хи-квадрат
- Кульбак-Лейблер дивергенция
- Jensen-Шеннона расхождение
- Махаланобиса
- Squared Махаланобиса
- Бхаттачариа
- Хеллингера
Подробнее на package's github page here.
+1 Спасибо за воспитывающим пакет 'Distances'. Я думаю, что на вопрос ОФ достаточно ответили 'norm()', но полезно знать о пакете. – Rhubarb
Это также работает для размеров выше 2 (норма поддерживает только 1- или 2-мерные массивы). Например, 'norm (rand ((4,4,4)) - rand ((4,4,4)))' будет терпеть неудачу –