Найти наибольшее абсолютное значение в недиагональных элементах симметричной матрицы - PullRequest
1 голос
/ 02 апреля 2012

Я хотел бы найти местоположение и значение наибольшего абсолютного значения в недиагональных элементах в симметричной матрице в R.

Например, с этим небольшим 3x3:

 matrix(c(99,11,-21, 11,99,13, -21,13,99), nrow = 3, ncol=3, byrow=TRUE)

       [,1] [,2] [,3]
 [1,]   99   11  -21
 [2,]   11   99   13
 [3,]  -21   13   99

Я хочу знать -21 как значение и либо 1,3, либо 3,1 как местоположение.

Есть ли какие-нибудь изящные способы сделать это, кроме как "грубой силой"?

Спасибо PS

Ответы [ 3 ]

5 голосов
/ 02 апреля 2012

Когда дело доходит до программирования, всегда трудно понять, что кто-то считает «грубой силой».Тем не менее, для квадратной матрицы (здесь она называется M), вы можете сделать что-то вроде этого:

m <- M
diag(m) <- NA

(mmax <- max(abs(m), na.rm=TRUE))
# [1] -21

which(abs(m) == mmax, arr.ind=TRUE)
#      row col
# [1,]   3   1
# [2,]   1   3
2 голосов
/ 02 апреля 2012
x <- matrix(c(99,11,-21, 11,99,13, -21,13,99), nrow = 3, ncol=3, byrow=TRUE)
diag(x) <- NA
which(abs(x) == max(abs(x),na.rm=T), arr.ind=TRUE)
0 голосов
/ 02 апреля 2012
#create matrix
m <- matrix(c(99,11,-21, 11,99,13, -21,13,99), nrow = 3, ncol=3, byrow=TRUE) 
#remove diagonal
diag(m) <- 0

#find locations of max absolute value using norm
which(abs(m) == norm(m,type="m"),arr.ind=TRUE)
     row col
[1,]   3   1
[2,]   1   3
...