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