我正在 R 中处理一个 230 x 230 的矩阵,我想提取矩阵上的 10 个(或任何其他数字而不是 1 个)最大输入,包括它们的位置和值。
额外的问题是这是一个相似度矩阵,所以我在对角线上有 1s,当然我想排除在最大搜索之外。
任何想法或命令?
一般来说,一个巧妙的方法是使用未充分利用的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)
| 归档时间: |
|
| 查看次数: |
3288 次 |
| 最近记录: |