Подсчитайте количество ненулевых столбцов в матрице - PullRequest
3 голосов
/ 04 июня 2019

у меня есть матрица mat.Некоторые из столбцов mat являются нулями, в то время как некоторые столбцы отличны от нуля.Как подсчитать ненулевые столбцы?

mat<-matrix(rep(0,2*5),ncol=2)
mat[,1]=c(1,2,3,4,5)

Желаемый результат - 1.

Ответы [ 2 ]

5 голосов
/ 04 июня 2019

Если вы хотите, чтобы столбцы с ненулевыми элементами имели в виду, что они могут иметь нули, но не все строки являются нулями, тогда работает следующее:

mat<-matrix(rep(0,2*5),ncol=2)
mat[,1]=c(1,2,3,4,5)

sum(colSums(mat!=0)!=0)
#> [1] 1

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

mat2<-matrix(rep(0,4*5),ncol=4)
mat2[,1]=c(0,2,3,4,5)
mat2[,2]=c(1,2,3,4,5)
mat2[,3]=c(0,0,0,-1,1)

sum(colSums(mat2!=0)!=0) #count of non-zero columns
#> [1] 3

sum(colSums(mat2!=0)==nrow(mat2)) #count of columns with no zeros
#> [1] 1

Если вы хотите узнать, какие столбцы отличны от нуля, используйте which вместо sum:

which(colSums(mat2!=0)!=0) #non-zero columns
#> [1] 1 2 3


which(colSums(mat2!=0)==nrow(mat2)) #columns with no zeros
#> [1] 2
1 голос
/ 04 июня 2019

Мы можем использовать apply по столбцам и подсчитывать количество столбцов, которые имеют any ненулевое значение

sum(apply(mat != 0, 2, any))
#[1] 1

Или, если вы хотите столбцы с all ненулевые значения

sum(apply(mat != 0, 2, all))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...