计算矩阵每列中的非零条目

时间:2014-09-24 19:11:31

标签: matlab

如果我有一个矩阵:

A = [1 2 3 4 5; 1 1 6 1 2; 0 0 9 0 1]

A =

     1     2     3     4     5
     1     1     6     1     2
     0     0     9     0     1

如何计算每列的非零条目数?例如,此矩阵的所需输出为:

2,2,3,2,3

我不确定如何执行此操作,sizelengthnumel似乎不符合要求。也许最好先删除零条目?

2 个答案:

答案 0 :(得分:5)

只是

> A ~= 0
ans =

   1   1   1   1   1
   1   1   1   1   1
   0   0   1   0   1

> sum(A ~= 0, 1)
ans =

   2   2   3   2   3

答案 1 :(得分:4)

这是我能提出的另一个解决方案,它对于密集矩阵而言速度非常快,但对于稀疏矩阵来说速度非常快(感谢@ user1877862!)。这也可以模仿人们如何用C或Java等编译语言来实现这一点,也可能用于研究目的。首先找到非零的行和列位置,然后仅对列位置执行直方图,以计算每列中看到非零的频率。换句话说:

[~,col] = find(A ~= 0);
counts = histc(col, 1:size(A,2));

find输出矩阵满足函数参数内部某些布尔条件的行和列位置。我们忽略了第一个输出,因为我们不关心行位置。

我们获得的输出是:

counts =

     2
     2
     3
     2
     3