r - 避免矩阵索引中的循环

标签 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 替代方案?请提出建议!

最佳答案

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

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

关于r - 避免矩阵索引中的循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49383524/

相关文章:

r - 是否有任何平台的文件分隔符不是 "/"?

r - 在 R 中剥离向量中的非 A-Z 字符

r - data.table 中的变量用法

r - 使用 R 中的模糊/近似字符串匹配合并两个数据框

r - 使用正则表达式计算我同时拥有名称及其比例的次数

R:如何通过仅比较每个字符串中的前 3 个制表符分隔项来对两个字符串向量使用 setdiff?不使用 qdap

r - 如何在 Shiny 中更改 C3 Gauge 上的间隔颜色

r - Shiny & ggplot : Numeric variables not recognized in ggplot's aes() mapping statement

r - 如何查找 R 矩阵中包含大于或等于给定数字的值的列数?

r - R : loading a table with number as the column heading all were wrongly added a X, how to solve it?