наиболее эффективное вычисление R-косинуса

У меня есть два вектора значений и один вектор весов, и мне нужно вычислить косинусное подобие. По сложным причинам я могу вычислить косинус только для одной пары за раз. Но мне приходится делать это много миллионов раз.

cosine_calc <- function(a,b,wts) {
  #scale both vectors by the weights, then compute the cosine of the scaled vectors
  a = a*wts
  b = b*wts
  (a %*% b)/(sqrt(a%*%a)*sqrt(b%*%b))
}

работает, но я хочу попытаться добиться от него большей производительности.

Примеры данных:

a = c(-1.2092420, -0.7053822, 1.4364633, 1.3612304, -0.3029147, 1.0319704, 0.6707610, -2.2128987, -0.9839970, -0.4302205)
b = c(-0.69042619, 0.05811749, -0.17836802, 0.15699691, 0.78575477, 0.27925779, -0.08552864, -1.31031219, -1.92756861, -1.36350112)
w = c(0.26333839, 0.12803180, 0.62396023, 0.37393705, 0.13539926, 0.09199102, 0.37347546, 1.36790007, 0.64978409, 0.46256891)
> cosine_calc(a,b,w)[,1]
[1,] 0.8390671

Этот вопрос указывает на то, что в R есть другие предопределенные косинусные функции, но ничего не говорит об их относительной эффективности.

7
задан Community 23 May 2017 в 10:27
поделиться