Я использую MATLAB. У меня есть матрица 8x1000
, и я хочу программу, которая даст мне матрицу 8x1
, где каждая запись подсчитывает количество ненулевых записей в соответствующей строке матрицы 8x1000
.Считать ненулевые элементы в каждой строке матрицы
3
A
ответ
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
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);
А = normrnd (1,1,8,1000) В = сумма (логическое (А), 2) –
@ Харшавардханьягараджан? – thewaywewalk
Извините, авария, это сработало, спасибо! –