2013-07-12 274 views
43

我希望找到矩陣的最大元素值及其位置(在矩陣的行和列id中)。在矩陣中查找最大值的行和列索引

我正在使用以下函數返回矩陣的行和列。

這似乎是一個糟糕的黑客 - 這是我可能缺少本地方法的事情。有沒有更好的/ 更多R的方式?

這裏是我的功能:

matxMax <- function(mtx) 
{ 
    colmn <- which(mtx == max(mtx)) %/% nrow(mtx) + 1 
    row <- which(mtx == max(mtx)) %% nrow(mtx) 
    return(matrix(c(row, colmn), 1)) 
} 

我用的是如下:

mm <- matrix(rnorm(100), 10, 10) 
maxCords <- matxMax(mm) 
mm[maxCords] 
+0

解決方案是一樣的,但我做了搜索,我認爲有一個解決方案下最大和最小(我記得搜索最小)。此外,該功能(儘管在這種情況下是冗餘的)可能具有某種教學價值。 – ricardo

回答

83

你可以做

## Some data 
set.seed(123) 
mm <- matrix(rbinom(40, 20, 0.5), 8, 5) 
mm 
#  [,1] [,2] [,3] [,4] [,5] 
# [1,] 9 10 8 11 11 
# [2,] 12 10 6 11 12 
# [3,] 9 14 9 10 6 
# [4,] 13 10 14 11 10 
# [5,] 13 11 13 9 12 
# [6,] 6 10 11 8 8 
# [7,] 10 7 11 14 9 
# [8,] 13 13 16 13 8 

which(mm == max(mm), arr.ind = TRUE) 
#  row col 
# [1,] 8 3 
+3

有什麼方法可以找到第二個最大值的位置?第二個最大值可能與第一個最大值相同,在這種情況下,我想獲得第二個最大值的位置,它將與第一個最大值完全相同。 – user2543622

+3

@ user2543622,您是否在設置中的示例中嘗試過建議的解決方案?所提出的解決方案提供矩陣中等於最大值的所有元素的列表。所以,如果有關係,你會得到他們。 – QuantIbex

0

這些怎麼樣?

which.min(mm) 
which.max(mm) 
+5

「which.min」不是'which.max'返回數組索引。兩者都將您的矩陣視爲一個向量,並返回向量索引而不是行和列索引。 –

相關問題