Подтвердить что ты не робот

Найти индексы ненулевых элементов в матрице

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

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

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

row col
1    1
1    3
2    1
2    3

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

4b9b3361

Ответ 1

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

Ответ 2

Ошибка в вашем примере кода - 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