避免矩阵索引中的循环

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替代品吗?建议请!

最佳答案
我们需要使用行索引来提取值和总和

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

转载注明原文:避免矩阵索引中的循环 - 代码日志