簡體   English   中英

R:在矩陣中找到最小值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM