在R中找到矩阵的最大值

时间:2015-09-12 22:51:43

标签: r matrix

我正在研究R中的矩阵,230 x 230,我想要提取矩阵中的10个(或任何其他数字除外)最大输入,包括它们的位置和值。

额外的问题是这是一个相似性矩阵,所以我在对角线上有1个,当然我想要离开最大搜索。

任何想法或命令?

1 个答案:

答案 0 :(得分:4)

一般来说,一个简洁的方法是使用未充分利用的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
相关问题