小编ans*_*ate的帖子

加速数据帧匹配

我有两个数据帧,很像这样:

data = data.frame(data=cbind(1:12,rep(c(1,2),6),rep(c(1,2,3),4)))
colnames(data)=c('v','h','c')

lookup = data.frame(data=cbind(c(rep(1,3),rep(2,3)),rep(c(1,2,3),2),21:26))
colnames(lookup)=c('h','c','t')
Run Code Online (Sandbox Code Playgroud)

我想从数据$ v中减去查找$ t,其中h和c列匹配.

我认为这样的事情会起作用

data$v-lookup$t[lookup$h==data$h&lookup$c==data$c]
Run Code Online (Sandbox Code Playgroud)

但并不神奇地知道我想隐式迭代数据行

我最终这样做了

myt = c()
for(i in 1:12) {
myt[i] = lookup$t[lookup$h==data$h[i]&lookup$c==data$c[i]]
}
Run Code Online (Sandbox Code Playgroud)

哪个工作正常,但我希望有人可以提出一个更合理的方式,不涉及循环.

performance r

7
推荐指数
2
解决办法
740
查看次数

最有效的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))
}
Run Code Online (Sandbox Code Playgroud)

工作,但我想尝试从中获得更好的表现.

示例数据:

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
Run Code Online (Sandbox Code Playgroud)

这个问题指出R中还有其他预定义的余弦函数,但没有说明它们的相对效率.

performance r linear-algebra

7
推荐指数
1
解决办法
1507
查看次数

标签 统计

performance ×2

r ×2

linear-algebra ×1