统计矩阵中每行非零元素的数量

3

我正在使用MATLAB。我有一个8x1000矩阵,我想要一个程序,能够给我一个8x1的矩阵,其中每个条目计算对应行中8x1000矩阵中非零条目的数量。

3个回答

7
你可以通过将数据转换为逻辑值,然后对每行中的非零元素进行求和来实现。具体方法是使用sum函数。
%// example data
A = randi(10,8,1000)-1;

%// count sum up non-zeros in every row
result = sum(logical(A),2)

result =

   904
   897
   909
   895
   885
   901
   903
   873

A = normrnd(1,1,8,1000) B = sum(logical(A),2)A = normrnd(1,1,8,1000) B = sum(logical(A),2) - Harshavardhan Thyagarajan
3
@HarshavardhanThyagarajan? - Robert Seifert

5
您可以使用矩阵乘法 -
out = (A~=0)*ones(size(A,2),1)  %// A is the input matrix

0
一种更加深奥的版本可以使用 accumarraybsxfun,并将 nnz 作为应用值到输入矩阵 A 的每列/组的函数。虽然不如使用 sum 和矩阵乘法高效,但仍是一个值得思考的方法 :):
B = bsxfun(@times, 1:size(A,1), ones(size(A,2),1)).';
out = accumarray(B(:), A(:), [], @nnz);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接