如果我有一个矩阵:
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
我不确定如何执行此操作,size
,length
或numel
似乎不符合要求。也许最好先删除零条目?
答案 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