Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
求R中矩阵上的最大值_R_Matrix - Fatal编程技术网

求R中矩阵上的最大值

求R中矩阵上的最大值,r,matrix,R,Matrix,我正在研究R,230 x 230中的一个矩阵,我想提取矩阵上的10(或除1以外的任何其他数字)最大输入,包括它们的位置和值 额外的问题是,这是一个相似矩阵,所以对角线上有1,当然我想把它从最大搜索中去掉 有什么想法或命令吗?一般来说,一个简单的方法是使用未充分使用的arrayInd函数,它为普通向量位置提供行和列位置。这就是which(…,arr.ind=TRUE)如何做到的。以下是您可能的做法: ## creating a random 230x230 matrix n <- 230;

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

额外的问题是,这是一个相似矩阵,所以对角线上有1,当然我想把它从最大搜索中去掉


有什么想法或命令吗?

一般来说,一个简单的方法是使用未充分使用的
arrayInd
函数,它为普通向量位置提供行和列位置。这就是
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
创建一个随机的230x230矩阵
你的矩阵不是正方形的吗?很抱歉,是的,因为它是相似的。我有一个输入错误。请提供一个可复制的示例。您可以使用
哪个(mat>排序(mat[lower.tri(mat)],TRUE)[10],arr.ind=TRUE)
来获取前10名的索引。然后,忽略那些可以工作的
row==col
,我会试试。Richard这是一个正方形的相似矩阵,非常直截了当,我想,我只是需要这个想法。不幸的是,我可以公开提供我的数据@谢谢,很好。太好了!一个小细节是,因为我有一个相似矩阵,我得到了5个最大值的两倍
$values;[1] -0.5129030 -0.5129030 -0.4990625 -0.4990625 -0.4980365 -0.4980365 -0.4841525 -0.4841525;  [9] -0.4825290-0.4825290
和类似位置。我试着稍微修改一下:
nlagest只是修改了结果,这样我想它可以做你想做的事情,如果矩阵是一个相似矩阵,将从
顺序
中选择前n个条目的索引加倍,所以它选择2,4,6。。。而不是1,2,3。。。这是
seq_len(n)*mult
仅供参考。。。从今天起,您需要添加递减参数以使其生效。>>顺序(m,递减=真)