r - R:在矩阵中找到最小值
问题描述
我想迭代地总结不同行的最小值。
我有一个矩阵:
我想从第 1 行(选择的值不是 0)开始找到这个矩阵的最小值。然后迭代地选择在第 1 行中提供最小值的列。接下来,选择与先前选择的列相同的下一行编号,依此类推。最后,对总数求和。
例如,从第 1 行开始并选择第 4 列,因为它提供的最小值为 13.924。然后,移动到第 4 行并再次找到最小值,它可能是第 3 列的 46.789。然后,移动到第 3 行并在第 2 列中找到该行中的最小值为 71.950。然后,从第 2 行中选择第 5 列。
对于这个例子:
mat_test[1,4] + mat_test[4,3] + mat_test[3,2] + mat_test[2,1]
13.924 + 46.789 + 71.950 + 25.579
total sum = 158.242
解决方案
假设您的矩阵mat_test
始终是方阵,您可以尝试下面的代码来实现您的目标
mat_test <- `diag<-`(mat_test,Inf)
inds <- c()
row <- 1
while (!row %in% inds[,1]) {
inds <- rbind(inds,c(row,rowNew <- which.min(mat_test[row,])))
row <- rowNew
}
total <- sum(mat_test[inds])
例子
set.seed(1)
mat_test <- `diag<-`(matrix(rnorm(25),nrow = 5),0)
> mat_test
[,1] [,2] [,3] [,4] [,5]
[1,] Inf -0.8204684 1.5117812 -0.04493361 0.91897737
[2,] 0.1836433 Inf 0.3898432 -0.01619026 0.78213630
[3,] -0.8356286 0.7383247 Inf 0.94383621 0.07456498
[4,] 1.5952808 0.5757814 -2.2146999 Inf -1.98935170
[5,] 0.3295078 -0.3053884 1.1249309 0.59390132 Inf
然后
> inds
[,1] [,2]
[1,] 1 2
[2,] 2 4
[3,] 4 3
[4,] 3 1
和
> mat_test[inds]
[1] -0.82046838 -0.01619026 -2.21469989 -0.83562861
推荐阅读
- angular - ng build --prod 在 ag-grid v 22.1.1 升级后失败
- ios - Why is the CollectionView function called twice in Swift?
- java - 从 S3 下载和解压缩文件的内存占用
- r - 将日期转换为数字,但限制为一年中的天数
- python - 如何使用 HTTPS 在 cdn 中的特定服务器 IP 上获取网站?
- regex - Google Sheet 大小写比较
- android - 模拟 FirebaseRemoteConfig getBoolean()
- django - 使用 django + gunicorn + nginx 发送电子邮件获取超时
- python - 如何使用flask-sqlalchemy在两个不同的表中创建两个唯一的主键?
- wordpress - 如何通过 wordpress 中的自定义插件创建自定义艺术家页面