Euclidean distance


Scalar notation

The distance between two points can be described using scalar notation as follows

\[ d_{ij} = \sqrt{\sum_{k=1}^m (x_{ik}-x_{jk})^2} \]


Let’s take a table containing 4 rows (observations) and 4 columns (variables)


df=data.frame(c(1,2,3,4),c(3,4,5,6),c(5,6,7,8),c(7,8,9,10))
df2=t(df)
row.names(df2) = c('a','b','c','d')
colnames(df2) = c('x1','x2','x3','x4')
df3 = data.frame(df2)

#DT::datatable(df2, option=list(dom='t')) 
knitr::kable(df2)
x1 x2 x3 x4
a 1 2 3 4
b 3 4 5 6
c 5 6 7 8
d 7 8 9 10
NA

For example, isolate the first two rows, a and b and calculate the deviations for each variable



DT::datatable(df3[1:2,], options = list(dom='t'))
NA

In this case the discards are all equal and are equal to 2, therefore the sum of their squares will be

\[ 2^2+2^2+2^2+2^2 = 16 \]

Then the distance will be \(d = \sqrt{16}\), or \(4\)  


Matrix notation

Similarly we can calculate the distance between two vectors using the scalar product


\[ d_{ij} = \sqrt{{\bf (x_i - x_j)\cdot (x_i - x_j)}^T} \]

From the table above we always isolate the two rows a and b but considering them as two vectors \(\bf a\) and \(\bf b\) of a space in \(m=4\) dimensions


a = as.numeric(df2[1,])
b = as.numeric(df2[2,])
a
[1] 1 2 3 4
b
[1] 3 4 5 6
z= b-a

Let’s call \(\bf z\) the vector resulting from differences in vector components \(\bf a\) and \(\bf b\).

z
[1] 2 2 2 2

Now do the dot product between this vector and its transpose: \({\bf z \cdot z}^T\)

z%*%z
     [,1]
[1,]   16

I get, as before, the value of \(16\), whose square root is precisely \(4\)


Manhattan distance


The Manhattan distance between two vectors, a and b, for \(m\) variables is calculated as:

\[ d_{ab} = \sum_{i=1}^m |a_{i}-b_{k}| \]


manhattan_dist <- function(a, b){
     dist <- abs(a-b)
     dist <- sum(dist)
     return(dist)
}

manhattan_dist(a,b)
[1] 8
LS0tDQp0aXRsZTogIkRpc3RhbmNlcyINCg0Kb3V0cHV0Og0KICBodG1sX25vdGVib29rOg0KICAgIGNvZGVfZm9sZGluZzogaGlkZQ0KICAgIHRoZW1lOiBjZXJ1bGVhbg0KICAgIHRvYzogeWVzDQoNCi0tLQ0KDQoNCmBgYHtyIGluY2x1ZGU9RkFMU0V9DQpsaWJyYXJ5KERUKQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpgYGANCg0KDQotLS0NCg0KPGJyLz4NCg0KIyBFdWNsaWRlYW4gZGlzdGFuY2UNCg0KPGJyLz4NCg0KIyMgU2NhbGFyIG5vdGF0aW9uDQoNClRoZSBkaXN0YW5jZSBiZXR3ZWVuIHR3byBwb2ludHMgY2FuIGJlIGRlc2NyaWJlZCB1c2luZyBzY2FsYXIgbm90YXRpb24gYXMgZm9sbG93cyBcDQo8YnIvPg0KDQokJA0KICBkX3tpan0gPSBcc3FydHtcc3VtX3trPTF9Xm0gKHhfe2lrfS14X3tqa30pXjJ9DQokJA0KDQotLS0NCg0KTGV04oCZcyB0YWtlIGEgdGFibGUgY29udGFpbmluZyA0IHJvd3MgKG9ic2VydmF0aW9ucykgYW5kIDQgY29sdW1ucyAodmFyaWFibGVzKQ0KDQoNCg0KDQpgYGB7ciBUYWJsZX0NCg0KZGY9ZGF0YS5mcmFtZShjKDEsMiwzLDQpLGMoMyw0LDUsNiksYyg1LDYsNyw4KSxjKDcsOCw5LDEwKSkNCmRmMj10KGRmKQ0Kcm93Lm5hbWVzKGRmMikgPSBjKCdhJywnYicsJ2MnLCdkJykNCmNvbG5hbWVzKGRmMikgPSBjKCd4MScsJ3gyJywneDMnLCd4NCcpDQpkZjMgPSBkYXRhLmZyYW1lKGRmMikNCg0KI0RUOjpkYXRhdGFibGUoZGYyLCBvcHRpb249bGlzdChkb209J3QnKSkgDQprbml0cjo6a2FibGUoZGYyKQ0KDQpgYGANCg0KDQotLS0NCg0KRm9yIGV4YW1wbGUsIGlzb2xhdGUgdGhlIGZpcnN0IHR3byByb3dzLCBhIGFuZCBiIGFuZCBjYWxjdWxhdGUgdGhlIGRldmlhdGlvbnMgZm9yIGVhY2ggdmFyaWFibGUNCg0KLS0tDQoNCg0KDQpgYGB7cn0NCg0KRFQ6OmRhdGF0YWJsZShkZjNbMToyLF0sIG9wdGlvbnMgPSBsaXN0KGRvbT0ndCcpKQ0KDQpgYGANCg0KLS0tDQoNCkluIHRoaXMgY2FzZSB0aGUgZGlzY2FyZHMgYXJlIGFsbCBlcXVhbCBhbmQgYXJlIGVxdWFsIHRvICAyLCB0aGVyZWZvcmUgdGhlIHN1bSBvZiB0aGVpciBzcXVhcmVzIHdpbGwgYmUgXA0KPGJyLz4NCiQkDQogIDJeMisyXjIrMl4yKzJeMiA9IDE2DQokJA0KDQoNClRoZW4gdGhlIGRpc3RhbmNlIHdpbGwgYmUgJGQgPSBcc3FydHsxNn0kLCBvciAkNCQgXCANCg0KDQotLS0NCg0KIyMgTWF0cml4IG5vdGF0aW9uDQoNClNpbWlsYXJseSB3ZSBjYW4gY2FsY3VsYXRlIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHR3byB2ZWN0b3JzIHVzaW5nIHRoZSBzY2FsYXIgcHJvZHVjdCBcDQoNCjxici8+DQoNCiQkDQogIGRfe2lqfSA9IFxzcXJ0e3tcYmYgKHhfaSAtIHhfailcY2RvdCAoeF9pIC0geF9qKX1eVH0NCiQkIFwNCg0KDQpGcm9tIHRoZSB0YWJsZSBhYm92ZSB3ZSBhbHdheXMgaXNvbGF0ZSB0aGUgdHdvIHJvd3MgYSBhbmQgYiBidXQgY29uc2lkZXJpbmcgdGhlbSBhcyB0d28gdmVjdG9ycyAkXGJmIGEkIGFuZCAkXGJmIGIkIG9mIGEgc3BhY2UgaW4gICRtPTQkIGRpbWVuc2lvbnMgXA0KDQoNCmBgYHtyfQ0KDQphID0gYXMubnVtZXJpYyhkZjJbMSxdKQ0KYiA9IGFzLm51bWVyaWMoZGYyWzIsXSkNCg0KYGBgDQoNCmBgYHtyfQ0KYQ0KYGBgDQpgYGB7cn0NCmINCmBgYA0KYGBge3J9DQp6PSBiLWENCmBgYA0KDQotLS0NCg0KTGV0J3MgY2FsbCAkXGJmIHokIHRoZSB2ZWN0b3IgcmVzdWx0aW5nIGZyb20gZGlmZmVyZW5jZXMgaW4gdmVjdG9yIGNvbXBvbmVudHMgJFxiZiBhJCBhbmQgJFxiZiBiJC4gDQoNCmBgYHtyfQ0Keg0KYGBgDQoNCi0tLQ0KDQpOb3cgZG8gdGhlIGRvdCBwcm9kdWN0IGJldHdlZW4gdGhpcyB2ZWN0b3IgYW5kIGl0cyB0cmFuc3Bvc2U6ICR7XGJmIHogXGNkb3Qgen1eVCQNCg0KYGBge3J9DQp6JSoleg0KYGBgDQoNCi0tLQ0KDQpJIGdldCwgYXMgYmVmb3JlLCB0aGUgdmFsdWUgb2YgJDE2JCwgd2hvc2Ugc3F1YXJlIHJvb3QgaXMgcHJlY2lzZWx5ICQ0JA0KDQo8YnIvPg0KDQojIE1hbmhhdHRhbiBkaXN0YW5jZQ0KDQo8YnIvPg0KDQpUaGUgTWFuaGF0dGFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlY3RvcnMsIGEgYW5kIGIsIGZvciAkbSQgdmFyaWFibGVzIGlzIGNhbGN1bGF0ZWQgYXM6IFwNCjxici8+DQoNCiQkDQogIGRfe2FifSA9IFxzdW1fe2k9MX1ebSB8YV97aX0tYl97a318DQokJA0KPGJyLz4NCg0KDQpgYGB7ciBlY2hvPVRSVUV9DQoNCm1hbmhhdHRhbl9kaXN0IDwtIGZ1bmN0aW9uKGEsIGIpew0KICAgICBkaXN0IDwtIGFicyhhLWIpDQogICAgIGRpc3QgPC0gc3VtKGRpc3QpDQogICAgIHJldHVybihkaXN0KQ0KfQ0KDQptYW5oYXR0YW5fZGlzdChhLGIpDQoNCmBgYA0KDQoNCg==