найти индексы ненулевых элементов в матрице - PullRequest
22 голосов
/ 07 июля 2010

Я хочу получить индексы ненулевых элементов в матрице. Например,

X <- matrix(c(1,0,3,4,0,5), byrow=TRUE, nrow=2);

должен дать мне что-то вроде этого

row col
1    1
1    3
2    1
2    3

Может кто-нибудь сказать, пожалуйста, каксделать это?

Ответы [ 2 ]

45 голосов
/ 07 июля 2010
which(X!=0,arr.ind = T)
     row col
[1,]   1   1
[2,]   2   1
[3,]   1   3
[4,]   2   3

Если arr.ind == TRUE и X - это массив, то результатом является матрица, в каждой строке которой указаны индексы элементов X

6 голосов
/ 07 июля 2010

В вашем примере кода есть ошибка - True не определен, используйте TRUE.

X <-matrix(c(1,0,3,4,0,5), byrow = TRUE, nrow = 2)

который должен это сделать:

which(!X == 0)
X[ which(!X == 0)]
#[1] 1 4 3 5

чтобы получить индексы строк / столбцов:

 row(X)[which(!X == 0)]
 col(X)[which(!X == 0)]

чтобы использовать их для индексации обратно в матрицу:

   X[cbind(row(X)[which(!X == 0)], col(X)[which(!X == 0)])]
   #[1] 1 4 3 5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...