避免矩阵索引

时间:2018-03-20 11:52:13

标签: r

dist是一个nxn成本矩阵:

dist <-matrix(c(0,3.2,1.2,3.2,0,0.5,1.2,0.5,0),nrow=3,ncol=3)

v是长度为n的向量,其中向量的索引对应于dist的行,向量中的值对应于dist的列

v <- c(2,2,3)

我想总算这样的费用:

cost <- 0

for(i in 1:length(v)){

    cost <- dist[i,v[i]] + cost

}

但这看起来很笨拙而且很慢。没有for循环这样做的诀窍是什么? for循环没有利用一些神奇的R替代品吗?建议请!

1 个答案:

答案 0 :(得分:4)

我们需要cbind使用行索引来提取值并sum

sum(dist[cbind(1:nrow(dist), v)])