【问题标题】:Count the number of non-zero columns in a matrix计算矩阵中非零列的数量
【发布时间】:2019-06-04 15:16:57
【问题描述】:

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

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

想要的结果是1

【问题讨论】:

  • 试试sum(colSums(mat == 0) != 0)

标签: r matrix


【解决方案1】:

如果您想要具有非零元素的列,这意味着它们可能有零但并非所有行都是零,那么以下工作:

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

【讨论】:

  • @M-M 您能否展示如何识别哪些列是“非零列”?即第 1、2 和 3 列
  • @adm 代替 sum() 使用 which()。例如which(colSums(mat!=0)!=0)
【解决方案2】:

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

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

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

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

【讨论】:

  • 有人使用maxapply 发布并删除了他们的答案,因为它不适用于所有否定列。我只是在这里留下这个评论,因为它更像你的解决方案:sum(apply(mat, 2, function(y) max(abs(y)))!=0)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-28
  • 1970-01-01
  • 2013-12-30
  • 2020-03-24
  • 2020-08-23
相关资源
最近更新 更多