[英]R : Finding minimum value in a matrix
我想對不同行的最小值進行迭代求和。
我有一個矩陣:
我想從第 1 行(選擇的值不是 0)開始找到這個矩陣的最小值。 然后迭代地選擇在第 1 行中提供最小值的列。接下來,選擇與先前選擇的列相同的下一行編號,依此類推。 最后,對總數求和。
例如,從第 1 行和 select 第 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.