2015-07-09 4 views

ответ

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 
+0

А = normrnd (1,1,8,1000) В = сумма (логическое (А), 2) –

+3

@ Харшавардханьягараджан? – thewaywewalk

+0

Извините, авария, это сработало, спасибо! –

5

Вы можете использовать matrix-multiplication -

out = (A~=0)*ones(size(A,2),1) %// A is the input matrix 
0

Более эзотерическая версия может использовать accumarray и bsxfun с nnz как функция, чтобы применить значения для каждого столбца/группы входная матрица A. Не так эффективно, как с помощью sum и матричного умножения, но до сих пор способ думать о :):

B = bsxfun(@times, 1:size(A,1), ones(size(A,2),1)).'; 
out = accumarray(B(:), A(:), [], @nnz);