计算矩阵中非零列的数量

时间:2019-06-04 15:16:57

标签: r matrix

我有一个矩阵matmat的某些列全为零,而某些列非零。如何计算非零的列?

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

期望的结果是1

2 个答案:

答案 0 :(得分:5)

如果您希望列中包含非零元素,这意味着它们可能具有零,但并非所有行都为零,则可以使用以下方法:

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 :(得分:1)

我们可以按列使用apply并计算具有any非零值的列数

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

或者如果您想要具有all个非零值的列

sum(apply(mat != 0, 2, all))