在 R 中查找矩阵上的最大值

Kwn*_*wps 3 r matrix

我正在 R 中处理一个 230 x 230 的矩阵,我想提取矩阵上的 10 个(或任何其他数字而不是 1 个)最大输入,包括它们的位置和值。

额外的问题是这是一个相似度矩阵,所以我在对角线上有 1s,当然我想排除在最大搜索之外。

任何想法或命令?

jow*_*ski 6

一般来说,一个巧妙的方法是使用未充分利用的arrayInd函数,它为简单的 jane 向量位置提供行和列位置。就是这样which(..., arr.ind = TRUE)做的。您可以这样做:

## creating a random 230x230 matrix
n <- 230;
set.seed(1);
m <- matrix(sample.int(100000, n*n, replace = TRUE), n, n);
diag(m) <- 1;

## function to return n largest values and position for matrix m
nlargest <- function(m, n, sim = TRUE) {
  mult <- 1;
  if (sim) mult <- 2;
  res <- order(m)[seq_len(n) * mult];
  pos <- arrayInd(res, dim(m), useNames = TRUE);
  list(values = m[res],
       position = pos)
}

diag(m) <- NA;
nlargest(m, 10);
# $values
# [1]  1  2 11 12 12 12 13 18 21 22
#
# $position
#      row col
# [1,]  59  95
# [2,] 178 202
# [3,] 160  34
# [4,]  83 151
# [5,] 150 194
# [6,]  18 225
# [7,]  13  38
# [8,] 206 182
# [9,]  89  22
#[10,] 142  99
Run Code Online (Sandbox Code Playgroud)